微信公众号被动消息回复原理解析

背景:某分厂需要实时查询工件堆放的位置,要求快速便捷,因此设计了采用微信公众号被动回复信息的方案。

技术实现:开发者服务器--基于Angular2框架的已发布网站,编程语言为Python,后台存储数据库为Mysql;

微信服务器--微信公众号,此业务只是处理微信客户端发送的文本信息,且不使用公众号的其他功能,因此不需要认证公众号;

微信客户端--关注公众号的微信使用者,即粉丝。

当粉丝给公众号发送特定的消息时,微信公众号自动回复相应内容,而其背后的实现原理可由下图所示:

由上图可知,粉丝(微信客户端)向公众号(微信服务器)发送消息后,公众号马上将消息报文转发给绑定的网站(开发者服务器),此时消息

传送到了开发者的系统里。然后系统解析消息报文,得到消息内容,再根据消息内容,从业务数据库中得到返回的消息文本,最终将消息文本包装

成回复的消息报文(xml),返回给公众号,公众号再发送给请求的粉丝。

消息报文: 微信服务器转发的消息报文格式如下:

<xml>

                <ToUserName>![DATA[toUser]]</ToUserName>               // 接收消息方,开发者微信号(公众号AppID)

                <FromUserName>![DATA[fromUser]]</FromUserName>         //发送方账号(OpenId)

                <CreateTime>12356548575</CreateTime>                   //消息创建时间

                <MsgType>![DATA[text]]</MsgType>                        //消息类型,text代表文本类型

                <Content>![DATA[?18-546]]</Content>                       //消息内容,本例为 ?18-546

                <MsgId>1234567890123456</MsgId>                       //消息ID

            </xml>

开发者服务器通过解析转发的消息报文,得到发送方账号(回复消息用)和消息内容,然后通过一系列业务处理,生成回复消息报文,格式如下:

       <xml>

              <ToUserName>![DATA[userName]]</ToUserName>            //接收消息方,微信客户端账号(OpenId)

              <FromUserName>![DATA[fromUser]]</FromUserName>         // 发送方账号,(公众号AppID)

              <CreateTime>456251484</CreateTime>                      //消息创建时间

              <MsgType>![DATA[text]]</MsgType>                         //回复的消息类型,text代表文本消息

             <Content>![[[18-546]的工作台位为[车体新厂房3号]]]</Content>     //回复的消息内容,本例为[18-546]的工作台位为[车体新厂房3号]

           </xml>

微信服务器接收到回复的消息报文后,通过解析,将内容发送给微信客户端,这样客户端接收到信息了。

注意事项: 1、开发服务器自接收到转发的消息后,需要再5秒内给予回复,超过时间,则自动回复错误提示消息"该公众号提供的服务出现故障,请稍后再试",

因此,业务处理时间最好不要大于5秒钟;

2、回复消息内容应遵从公众号信息内容的设定,最好不要回复带空格的消息,因为会出现不能正常回复的现象。

总结

以上所述是小编给大家介绍的微信公众号被动消息回复原理解析,希望对大家啊有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • 详解nodejs微信公众号开发——4.自动回复各种消息

    上一篇文章:nodejs微信公众号开发--3.封装消息响应模块,实现了对消息接口的模块化处理,方便后期的使用,本篇文章将介绍微信公众号回复各种消息的功能实现,包括文本.图片.语音.视频.音乐.图文等. 注:感觉最近localtunnel很不稳定,测试起来比较麻烦,有条件的自己搞个云服务器吧,我比较偷懒,几继续使用localtunnel了. 1. 被动回复用户消息 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML

  • 微信公众号被动消息回复原理解析

    背景:某分厂需要实时查询工件堆放的位置,要求快速便捷,因此设计了采用微信公众号被动回复信息的方案. 技术实现:开发者服务器--基于Angular2框架的已发布网站,编程语言为Python,后台存储数据库为Mysql: 微信服务器--微信公众号,此业务只是处理微信客户端发送的文本信息,且不使用公众号的其他功能,因此不需要认证公众号: 微信客户端--关注公众号的微信使用者,即粉丝. 当粉丝给公众号发送特定的消息时,微信公众号自动回复相应内容,而其背后的实现原理可由下图所示: 由上图可知,粉丝(微信客

  • 微信公众号开发之回复图文消息java代码

    微信公众号开发之回复图文消息,供大家参考,具体内容如下 图文消息的主要参数说明 通过微信官方的消息接口指南,可以看到对图文消息的参数介绍,如下图所示: 从上图可以了解到: 1.图文消息的个数限制为10,也就是图文中ArticleCount的值(图文消息的个数,限制在10条以内) 2.对于图文消息,第一条图文的图片显示为大图,其他图文的图片显示为小图. 3.第一条图文的图片大小建议为640*320,其他图文的图片建议为80*80 下面开始实现: 请求消息的基类: import com.though

  • 微信公众号开发之文本消息自动回复php代码

    本文实例为大家分享了php微信文本消息自动回复 别代码,供大家参考,具体内容如下 1.PHP示例代码下载  下载地址1:http://xiazai.jb51.net/201608/yuanma/phpwx(jb51.net).rar  下载地址2:https://mp.weixin.qq.com/wiki/home/index.html(开始开发->接入指南->PHP示例代码下载) 2.wx_sample.php初始代码 <?php /** * wechat php test */ //

  • 微信公众号开发之微信公共平台消息回复类实例

    本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位分享一个. 复制代码 代码如下: <?php /**  * 微信公共平台消息回复类  *  *  */ class BBCweixin{    private $APPID="******";  private $APPSECRET="******";  /*  

  • Java开发微信公众号接收和被动回复普通消息

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本消息 2.图片消息 3.语音消息 4.视频消息 5.小视频消息 6.地理位置消息 7.链接消息(被动回复的消息) 被动回复的普通消息包括: 1.回复文本消息 2.回复图片消息 3.回复语音消息 4.回复视频消息 5.回复音乐消息 6.回复图文消息 其实接收消息和被动回复消息这两个动作是不分家的,这本

  • 如何采集微信公众号历史消息页

    采集微信文章和采集网站内容一样,都需要从一个列表页开始.而微信文章的列表页就是公众号里的查看历史消息页.现在网络上的其它微信采集器有的是利用搜狗搜索,采集方式虽然简单多了,但是内容不全.所以我们还是要从最标准最全面的公众号历史消息页来采集. 因为微信的限制,我们能复制到的链接是不完整的,在浏览器中无法打开看到内容.所以我们需要通过上一篇文章介绍的方法,使用anyproxy获取到一个完整的微信公众号历史消息页面的链接地址. http://mp.weixin.qq.com/mp/getmasssen

  • python实现给微信公众号发送消息的方法

    本文实例讲述了python实现给微信公众号发送消息的方法.分享给大家供大家参考,具体如下: 现在通过发微信公众号信息来做消息通知和告警已经很普遍了.最常见的就是运维通过zabbix调用shell脚本给微信发消息,起到告警的作用.当要发送的信息较多,而且希望按照指定格式显示的好看一点的时候,shell处理起来,个人感觉不太方便.于是我用Python重写了发微信的功能. #coding:utf-8 import urllib2 import json import sys def getMsg():

  • Java微信公众号安全模式消息解密

    本文实例为大家分享了Java微信公众号安全模式消息解密的具体代码,供大家参考,具体内容如下 1.微信公众平台下载解密工具,导入项目中,根据demo解密消息,解密工具官方下载地址:点击打开链接 public static String streamToString(HttpServletRequest request) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(requ

  • java微信公众号发送消息模板

    本文实例为大家分享了java微信公众号发送消息模板的具体代码,供大家参考,具体内容如下 这段时间接触公众号开发,写下向用户发送消息模板的接口调用 先上接口代码 public static JSONObject sendModelMessage(ServletContext context,JSONObject jsonMsg) { System.out.println("消息内容:"+jsonMsg); boolean result = false; try { getWX_Acces

  • 如何利用python给微信公众号发消息实例代码

    现在通过发微信公众号信息来做消息通知和告警已经很普遍了.最常见的就是运维通过zabbix调用shell脚本给微信发消息,起到告警的作用.当要发送的信息较多,而且希望按照指定格式显示的好看一点的时候,shell处理起来,个人感觉不太方便.于是我用python重写了发微信的功能. #coding:utf-8 import urllib2 import json import sys def getMsg(): #为了避免发送中文消息报错,使用utf8方式编码 reload(sys) sys.setd

  • 微信公众号支付H5调用支付解析

    最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验. 一.配置公众号微信支付   需要我们配置微信公众号支付地址和测试白名单. 比如:支付JS页面的地址为 http://www.xxx.com/shop/pay/             那此处配置www.xxx.com/shop/pay/ 二.开发流程 借用微信公众号支付api(地址 http://pay.weixin.q

  • C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享

    总体思路: 1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原理和编程不是特别懂,在模拟登陆的地方,不是特别清楚,希望有大神指教) 3.模拟登陆后会获得一个token(令牌)和cookie. 4.因为模拟登陆后相当于就进入了微信公众平台,在这个里面就可以抓取到需要的数据,如公众好友的昵称,fakeId.其中的fakeid非常重要,因为传输数据必须要知道对方的fakeid. 5.知道对方的fakeid就可以进行数据的发送了. 这里是整个项目的源码下载:h

  • 微信公众号模板消息群发php代码示例

    微信模板消息只能发给一个人,如果要群发,需要通过php循环,依次发送. 注意,如果模板消息发信息时有时无,不稳定,可能你的access_token令牌更新缓存不及时,过期了.可以根据日志文件查看.建议300秒更新一下.否则会很烦. 模板id需要自己去公众号中设置行业后得到. <?php //使用方法.直接在页面的逻辑中增加fahuo_wechat();即可.函数要事先引用. function fahuo_wechat($shopid){ if(_cfg("sendmobile")

随机推荐