微信公眾號(hào)被動(dòng)消息回復(fù)原理解析
背景:某分廠需要實(shí)時(shí)查詢工件堆放的位置,要求快速便捷,因此設(shè)計(jì)了采用微信公眾號(hào)被動(dòng)回復(fù)信息的方案。
技術(shù)實(shí)現(xiàn):開(kāi)發(fā)者服務(wù)器--基于Angular2框架的已發(fā)布網(wǎng)站,編程語(yǔ)言為Python,后臺(tái)存儲(chǔ)數(shù)據(jù)庫(kù)為Mysql;
微信服務(wù)器--微信公眾號(hào),此業(yè)務(wù)只是處理微信客戶端發(fā)送的文本信息,且不使用公眾號(hào)的其他功能,因此不需要認(rèn)證公眾號(hào);
微信客戶端--關(guān)注公眾號(hào)的微信使用者,即粉絲。
當(dāng)粉絲給公眾號(hào)發(fā)送特定的消息時(shí),微信公眾號(hào)自動(dòng)回復(fù)相應(yīng)內(nèi)容,而其背后的實(shí)現(xiàn)原理可由下圖所示:

由上圖可知,粉絲(微信客戶端)向公眾號(hào)(微信服務(wù)器)發(fā)送消息后,公眾號(hào)馬上將消息報(bào)文轉(zhuǎn)發(fā)給綁定的網(wǎng)站(開(kāi)發(fā)者服務(wù)器),此時(shí)消息
傳送到了開(kāi)發(fā)者的系統(tǒng)里。然后系統(tǒng)解析消息報(bào)文,得到消息內(nèi)容,再根據(jù)消息內(nèi)容,從業(yè)務(wù)數(shù)據(jù)庫(kù)中得到返回的消息文本,最終將消息文本包裝
成回復(fù)的消息報(bào)文(xml),返回給公眾號(hào),公眾號(hào)再發(fā)送給請(qǐng)求的粉絲。
消息報(bào)文: 微信服務(wù)器轉(zhuǎn)發(fā)的消息報(bào)文格式如下:
<xml>
<ToUserName>![DATA[toUser]]</ToUserName> // 接收消息方,開(kāi)發(fā)者微信號(hào)(公眾號(hào)AppID)
<FromUserName>![DATA[fromUser]]</FromUserName> //發(fā)送方賬號(hào)(OpenId)
<CreateTime>12356548575</CreateTime> //消息創(chuàng)建時(shí)間
<MsgType>![DATA[text]]</MsgType> //消息類型,text代表文本類型
<Content>![DATA[?18-546]]</Content> //消息內(nèi)容,本例為 ?18-546
<MsgId>1234567890123456</MsgId> //消息ID
</xml>
開(kāi)發(fā)者服務(wù)器通過(guò)解析轉(zhuǎn)發(fā)的消息報(bào)文,得到發(fā)送方賬號(hào)(回復(fù)消息用)和消息內(nèi)容,然后通過(guò)一系列業(yè)務(wù)處理,生成回復(fù)消息報(bào)文,格式如下:
<xml>
<ToUserName>![DATA[userName]]</ToUserName> //接收消息方,微信客戶端賬號(hào)(OpenId)
<FromUserName>![DATA[fromUser]]</FromUserName> // 發(fā)送方賬號(hào),(公眾號(hào)AppID)
<CreateTime>456251484</CreateTime> //消息創(chuàng)建時(shí)間
<MsgType>![DATA[text]]</MsgType> //回復(fù)的消息類型,text代表文本消息
<Content>![[[18-546]的工作臺(tái)位為[車體新廠房3號(hào)]]]</Content> //回復(fù)的消息內(nèi)容,本例為[18-546]的工作臺(tái)位為[車體新廠房3號(hào)]
</xml>
微信服務(wù)器接收到回復(fù)的消息報(bào)文后,通過(guò)解析,將內(nèi)容發(fā)送給微信客戶端,這樣客戶端接收到信息了。
注意事項(xiàng): 1、開(kāi)發(fā)服務(wù)器自接收到轉(zhuǎn)發(fā)的消息后,需要再5秒內(nèi)給予回復(fù),超過(guò)時(shí)間,則自動(dòng)回復(fù)錯(cuò)誤提示消息"該公眾號(hào)提供的服務(wù)出現(xiàn)故障,請(qǐng)稍后再試",
因此,業(yè)務(wù)處理時(shí)間最好不要大于5秒鐘;
2、回復(fù)消息內(nèi)容應(yīng)遵從公眾號(hào)信息內(nèi)容的設(shè)定,最好不要回復(fù)帶空格的消息,因?yàn)闀?huì)出現(xiàn)不能正?;貜?fù)的現(xiàn)象。
總結(jié)
以上所述是小編給大家介紹的微信公眾號(hào)被動(dòng)消息回復(fù)原理解析,希望對(duì)大家啊有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
C#事件中的兩個(gè)參數(shù)詳解(object sender,EventArgs e)
這篇文章主要介紹了C#事件中的兩個(gè)參數(shù)詳解(object sender,EventArgs e),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
C#中使用WinRAR實(shí)現(xiàn)加密壓縮及解壓縮文件
這篇文章主要介紹了C#中使用WinRAR實(shí)現(xiàn)加密壓縮及解壓縮文件,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-07-07
C# Winform使用log4net進(jìn)行日志記錄
Log4Net是從Java的log4j移植過(guò)來(lái)的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫(kù)等不同的介質(zhì)或目標(biāo),下面我們就來(lái)學(xué)習(xí)一下如何使用log4net進(jìn)行日志記錄吧2023-11-11
用C#的params關(guān)鍵字實(shí)現(xiàn)方法形參個(gè)數(shù)可變示例
params關(guān)鍵字以實(shí)現(xiàn)方法形參個(gè)數(shù)可變是C#語(yǔ)法的一大優(yōu)點(diǎn),下面是用C#中的params關(guān)鍵字實(shí)現(xiàn)方法形參個(gè)數(shù)可變2014-09-09
詳解C#如何將枚舉以下拉數(shù)據(jù)源的形式返回給前端
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)將枚舉以下拉數(shù)據(jù)源的形式返回給前端,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06

