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