教你如何用java實現微信公衆平臺


 

很多小廣告網站看得不舒服,可以到原文地址去看

以下是原文地址

http://wenchangping.iteye.com/blog/1919248


       這個暑假,主要是用來研究Unity3D和微信平臺開發了,我的Unity還沒弄出結果,倒是先把微信平臺給做的差不多了,那麼不廢話,今天就教大家如何去用java實現微信公衆平臺接口的。

     1.首先先給大家一個鏈接,相信大家如果對這個感興趣的話,都已經看過了,不過我還是發一發,研究一下這個接口。http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5,這個是微信公衆平臺的一個接口,他規定了你如何你與微信服務器通信的一個協議方式,用戶發來的消息會首先進入微信服務器,然後通過微信服務器給你把消息傳遞過來,所以,你與用戶之間其實是沒有直接進行連接的,這點要認識到。當然官方有一個PHP格式的文件,如果懂得話,可以直接下載自己觀摩觀摩。我這邊也就不多說了。

 

    2.微信公衆平臺的搭建。首先你必須要有一個申請一個微信公衆平臺賬號,這個很簡單的https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN自己去申請就Ok,申請後,進入高級功能的開發模式中(其他功能可以自己去了解,這裏主要講對於平臺的開發),可以看到他會要你填寫一個URL和token的東西,URL是你的服務器相映類的映射地址(這個對於學java中web的人來說,並不陌生吧),token是一個相當於”用來加密的碼“的東西,API文檔中也有介紹。這個東西呢,是一個處於驗證階段的東西,就好像是你要設定一個URL,那人家必須保證,你這個URL地址是能用的,他會傳給你一個echostr的參數,然後給你很多其他很多參數(如你自己的token等)來確認這個請求是來自微信平臺,最後把他傳給你的echostr傳回給微信平臺,平臺就會把你說輸入的URL綁定,以後就不用驗證了,這個URL就被微信說識別,以後要是有人發送了消息給你的平臺,他就會通過URL把這個消息轉發給你。這是微信驗證的整個過程。那麼實現驗證的代碼是怎麼的呢,對於我來說就一句話:

response.getWriter().write(request.getParameter("echostr"));

 爲什麼會顯得如此簡單呢,是因爲我的服務器只是用來實現這個平臺的,所以不需要官方給定的那麼多驗證,如果說你的服務器是已經開始運行在處理其他工作的話,那就需要驗證,參考:http://blog.csdn.net/wangqianjiao/article/details/8469780這個人詳細說明了平臺驗證的過程,包括加密呀,獲取驗證什麼的。但我還是說明一下,如果你的服務器沒用來做其他用途,那麼就一句話就行,在doGet裏邊寫上這句話,就能輕易完成驗證,何必那麼麻煩呢,是吧?

      3.微信平臺的使用。在搭建好平臺,系統識別了你的URL後,就應該學會對消息經行處理。請記住,驗證過程只是用來綁定URL的,一旦綁定成功,成爲開發者,之前工作就沒用了,請把那句代碼請刪掉(不刪也沒什麼,但最好是刪掉,以免造成程序可讀性降低),在消息發送的過程中,平臺是通過Post來發送的,所以你的所有處理,都得在doPost中經行。

             (1).如何獲取消息?在微信的API文檔中也有消息描述,他會用過一些參數向你發送很多這個消息,下面是文本消息的例子。

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

 


這是微信平臺會發送給你的消息,其中fromUserName是一個參數,指的是用戶微信唯一的標示符,應該用戶的微信ID經過加密形成的串,因爲它是唯一的,所以一般用用來做層級的標示符,也就是判斷用戶正在進入哪一級的菜單。ToUserName爲公共平臺的ID,CreateTime爲消息產生的時間,MsgType爲消息類型(即text消息是文本消息,如果是圖片消息,則爲image),Content爲消息內容,指的是該消的實際內容,MsgId是該消息的唯一ID號。這個就是整個的消息組成體,他給你一個xml,自己解析出內容

           InputStream is = request.getInputStream();
            // 取出對應請求流的長度
        int size = request.getContentLength();
        byte[] buffer = new byte[size];//緩存數組
        byte[] xmldataByte = new byte[size];//存放結果的數組
           int count = 0;
           int rbyte = 0;
           // 循環讀取
        while (count < size) { 
           // 每次實際讀取長度存於rbyte中
           rbyte = is.read(buffer); 
                for(int i=0;i<rbyte;i++) {
                    xmldataByte[count + i] = buffer[i];
                }
                count += rbyte;
            }
            is.close();
	//將傳來的數據轉換字符集
            String requestStr = new String(xmldataByte, "UTF-8");
            //數據讀取完成
        //獲取xml中的參數
            Document doc = DocumentHelper.parseText(requestStr);
            Element rootElt = doc.getRootElement();
            String content = rootElt.elementText("Content");
            String toUserName = rootElt.elementText("ToUserName");
            String fromUserName = rootElt.elementText("FromUserName");
            String msgType = rootElt.elementText("MsgType");

 獲取參數就完成了,這樣,一個全面的用戶發送來的消息就接受到了,是不是很容易?接收到消息過後就要開始處理消息,這個用您自己來定,根據您實際運用來處理。

 

                (2)如何返回消息,做完消息的處理後,我們要對用戶一個反饋,如何返回消息?其實是一樣的

               String responseStr = "<xml>";
                responseStr += "<ToUserName><![CDATA[" + fromUserName
                        + "]]></ToUserName>";
                responseStr += "<FromUserName><![CDATA[" + toUserName
                        + "]]></FromUserName>";
                responseStr += "<CreateTime>" + System.currentTimeMillis()
                        + "</CreateTime>";
                responseStr += "<MsgType><![CDATA[text]]></MsgType>";
                responseStr += "<Content>這裏寫要返回的具體內容</Content>";
                responseStr += "<FuncFlag>0</FuncFlag>";
                responseStr += "</xml>";
                response.getWriter().write(responseStr);

 在對應的地方,寫上對應的內容就可以了,最好的是,把他封裝成一個方法,或者類的靜態方法,我自己就不做詳細描述。

          4.這樣一個簡單的微信公衆平臺就已經完成,從一開始的URL驗證,到對用戶的接發消息,形成一個完成的體系,當然嗎,我的代碼中比較混亂,沒有形成一個比較結構化的封裝,我是從我的代碼中截取出來的,所以顯得才如此,這個可以有大家去創造,在最後,我會附上自己源碼的一個附件,是我出去的工程本身後的一個軀殼,大家填入自己東西就可以用了。還附上dom4j(用於解析xml的類庫)的附件。

          5.如果看了位置描述不理解,可以下載我上傳的文件自己研究,我博客說沒有提到,你有不太理解的,請聯繫我的郵箱[email protected],或者直接聯繫QQ也行。我儘量爲大家解決問題,畢竟我已經做過了一些瞭解。謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章