天天看點

微信公衆開放平台開發01---微信公衆平台介紹,以及開發準備

微信公衆開放平台開發01---微信公衆平台介紹,以及開發準備

部分内容收集于網絡:

1.先分享一份源碼:

微信公衆開放平台開發 -智能機器人java源代碼工程

接口配置資訊

url:​​http://tomcat886.duapp.com/coreServlet​​​

Token:weixin

-----------------------------------------------

2.微信公衆平台的搭建。

  首先你必須要有一個申請一個微信公衆平台賬号,

   這個很簡單的​​weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN">​​​​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"));

   為什麼會顯得如此簡單呢,是因為我的伺服器隻是用來實作這個平台的,是以不需要官方給定的那麼多驗證,

   如果說你的伺服器是已經開始運作在處理其他工作的話,那就需要驗證,

   這個人詳細說明了平台驗證的過程,包括加密呀,擷取驗證什麼的。

   但我還是說明一下,如果你的伺服器沒用來做其他用途,那麼就一句話就行,

   在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);

     //在對應的地方,寫上對應的内容就可以了,最好的是,把他封裝成一個方法,

     //或者類的靜态方法,我自己就不做較長的描述。