微信公衆開放平台開發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);
//在對應的地方,寫上對應的内容就可以了,最好的是,把他封裝成一個方法,
//或者類的靜态方法,我自己就不做較長的描述。