消息管理
微信公衆号開發中,最重要的一個業務,我認為是消息管理。因為使用者與公衆号的互動的開始是通過公衆對話視窗,不管是使用者關注、取消關注、發送文字、圖檔等、點選菜單欄都會形成對應的消息。具體官方文檔:https://mp.weixin.qq.com/wiki...
我們伺服器收到微信伺服器的消息類型有2類:
1.接收普通消息
2.接收事件推送
注意:微信伺服器将POST消息的XML資料包到開發者填寫的URL上,要求我們伺服器要在5秒内回複(回複的格式也是xml),微信伺服器在五秒内收不到響應會斷掉連接配接,并且重新發起請求,總共重試三次。假如我們伺服器無法保證在五秒内處理并回複,可以直接回複空串(或success),微信伺服器不會對此作任何處理,并且不會發起重試。但我們伺服器沒有5秒内或者回複了非法的資料,微信會在公衆号會話中,向使用者下發系統提示“該公衆号暫時無法提供服務,請稍後再試“。
xml的一般格式:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4VGbjlGdyF2XmZGNzY2NzYjY2QmY10CNyMjN3gjMyQTMvw1N4IzLcJDNx8CXt92YuQHb1FmZ05WZtdWZz5yYpRXY0NXLldWYtl2Lc9CX6MHc0RHaiojIsJye.jpg)
報錯:
下面我們先來看看接收普通消息
普通消息包括的類型:
1.文本消息 //MsgType=text
2.圖檔消息 //MsgType=image
3.語音 //MsgType=voice
4.視訊消息 //MsgType=voice
5.小視訊消息 //MsgType=shortvideo
6.地理位置消息 //MsgType=location
7.連結消息 //MsgType=link
微信伺服器post過來的xml格式和各個字段的含義(以文本消息為例,其他消息的字段也差不多,都是通過:MsgType來區分不同的類型)
ToUserName 開發者公衆号的微信号
FromUserName 發送者賬号(這個賬号,是使用者的微信号加密而來,一般被稱為openid)
CreateTime 時間戳
MsgType 消息類型
Content 内容
事件推送
事件推送的類型:
資料格式與普通消息的非常相似,MsgType都是event,事件推送通過Event字段來區分事件類型:subscribe(訂閱)、unsubscribe(取消訂閱)、
掃描帶參數二維碼事件(subscribe使用者未關注時,進行關注後的事件推送;SCAN使用者已關注時的事件推送)、LOCATION 上報地理位置事件、自定義菜單事件(CLICK 點選菜單拉取消息時的事件推送;VIEW 點選菜單跳轉連結時的事件推送)
我們接收到微信伺服器發送過來的資料,那我們怎樣回複呢?
被動回複:
回複的資料格式也是xml,以回複文本消息為例,下面是xml資料。
ToUserName 接收方帳号(我們收到的openid)
FromUserName 開發者微信号
CreateTime 消息時間戳
MsgType 回複的消息類型
Content 回複的内容
實戰例子:
1.使用者關注公衆号時,給使用者發送歡迎語
2.收到各種普通消息,簡單回複文本
3.npm install xml2js ,利用xml2js把xml解析成js對象
xml to js object:
關鍵代碼:
1.自定義擷取xml資料函數
2.業務邏輯
結果:
沒有做回複的時候,可以看到微信推了3次資料,3次後公衆号提示報錯資訊:
在公衆号會話框中發送文字:“測試”
我們伺服器收到微信3次的推送
正常加上回複邏輯後:
掃碼關注時,提示:歡迎關注
發送文字、圖檔
消息管理-消息回複,我們就講到這裡。下一節,講微信公衆号接口的調用。