天天看點

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

消息管理

微信公衆号開發中,最重要的一個業務,我認為是消息管理。因為使用者與公衆号的互動的開始是通過公衆對話視窗,不管是使用者關注、取消關注、發送文字、圖檔等、點選菜單欄都會形成對應的消息。具體官方文檔:https://mp.weixin.qq.com/wiki...

我們伺服器收到微信伺服器的消息類型有2類:

1.接收普通消息

2.接收事件推送

注意:微信伺服器将POST消息的XML資料包到開發者填寫的URL上,要求我們伺服器要在5秒内回複(回複的格式也是xml),微信伺服器在五秒内收不到響應會斷掉連接配接,并且重新發起請求,總共重試三次。假如我們伺服器無法保證在五秒内處理并回複,可以直接回複空串(或success),微信伺服器不會對此作任何處理,并且不會發起重試。但我們伺服器沒有5秒内或者回複了非法的資料,微信會在公衆号會話中,向使用者下發系統提示“該公衆号暫時無法提供服務,請稍後再試“。

xml的一般格式:

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

報錯:

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

下面我們先來看看接收普通消息

普通消息包括的類型:

1.文本消息 //MsgType=text

2.圖檔消息 //MsgType=image

3.語音 //MsgType=voice

4.視訊消息 //MsgType=voice

5.小視訊消息 //MsgType=shortvideo

6.地理位置消息 //MsgType=location

7.連結消息 //MsgType=link

微信伺服器post過來的xml格式和各個字段的含義(以文本消息為例,其他消息的字段也差不多,都是通過:MsgType來區分不同的類型)

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

ToUserName 開發者公衆号的微信号

FromUserName 發送者賬号(這個賬号,是使用者的微信号加密而來,一般被稱為openid)

CreateTime 時間戳

MsgType 消息類型

Content 内容

事件推送

事件推送的類型:

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

資料格式與普通消息的非常相似,MsgType都是event,事件推送通過Event字段來區分事件類型:subscribe(訂閱)、unsubscribe(取消訂閱)、

掃描帶參數二維碼事件(subscribe使用者未關注時,進行關注後的事件推送;SCAN使用者已關注時的事件推送)、LOCATION 上報地理位置事件、自定義菜單事件(CLICK 點選菜單拉取消息時的事件推送;VIEW 點選菜單跳轉連結時的事件推送)

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

我們接收到微信伺服器發送過來的資料,那我們怎樣回複呢?

被動回複:

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

回複的資料格式也是xml,以回複文本消息為例,下面是xml資料。

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

ToUserName 接收方帳号(我們收到的openid)

FromUserName 開發者微信号

CreateTime 消息時間戳

MsgType 回複的消息類型

Content 回複的内容

實戰例子:

1.使用者關注公衆号時,給使用者發送歡迎語

2.收到各種普通消息,簡單回複文本

3.npm install xml2js ,利用xml2js把xml解析成js對象

xml to js object:

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

關鍵代碼:

1.自定義擷取xml資料函數

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

2.業務邏輯

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

結果:

沒有做回複的時候,可以看到微信推了3次資料,3次後公衆号提示報錯資訊:

在公衆号會話框中發送文字:“測試”

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

我們伺服器收到微信3次的推送

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

正常加上回複邏輯後:

掃碼關注時,提示:歡迎關注

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

發送文字、圖檔

快速學習nodejs系列:微信公衆号開發三之消息管理與回複消息

消息管理-消息回複,我們就講到這裡。下一節,講微信公衆号接口的調用。