公众号开发第三篇--接收用户消息

栏目: 编程语言 · XML · 发布时间: 5年前

内容简介:订阅号除了可以向关注用户群发消息之外,还可以接收用户发送的消息。消息来源主要有两种这两种消息都会被微信服务器转发给我们的开发服务器

订阅号除了可以向关注用户群发消息之外,还可以接收用户发送的消息。

1.消息格式

消息来源主要有两种

  • 事件推送:如用户关注公众号、取关公众号、点击公众号中的自定义菜单等
  • 图文、音频、视频、地理位置等消息:如通过聊天窗口发送文本、视频、图片等内容

这两种消息都会被微信服务器转发给我们的开发服务器

消息格式为xml格式,消息的类型不同,xml的结构会有些差别,如文本消息的结构为

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[this is a test]]></Content>
  <MsgId>1234567890123456</MsgId>
</xml>

图片消息的格式为

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType><![CDATA[image]]></MsgType>
  <PicUrl><![CDATA[this is a url]]></PicUrl>
  <MediaId><![CDATA[media_id]]></MediaId>
  <MsgId>1234567890123456</MsgId>
</xml>

详细的消息格式,参见开发文档

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453

参数的具体含义,也参见上面的文档

关注事件的结构为

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
</xml>

事件的结构参见如下文档

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454

2.消息如何发送

上面介绍的这些消息,微信服务器会以 post 方式发送到开发服务器,也就是下面配置的 地址

公众号开发第三篇--接收用户消息

3. 如何接收消息

在第二章中,我们在index(模块)/index(控制器)/index(方法)中编写了如下代码,用于验证开发服务器是否可用

//接收微信服务器发送过来的数据
            $signature = $_GET['signature'];
            $timestamp = $_GET['timestamp'];
            $nonce = $_GET['nonce'];
            //这里token的值应该与配置中的token值一致
            $token = "weixin";
            //1)将token、timestamp、nonce三个参数进行字典序排序
            $arr = array($token, $timestamp, $nonce);
            sort($arr);
            //2)将三个参数字符串拼接成一个字符串进行sha1加密
            $tempstr = implode('', $arr);
            $tempstr = sha1($tempstr);
            //3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
            if ($tempstr == $signature) {
                //一定要加上这行代码,否则可能导致token总是验证失败
                ob_clean();
                //4) 返回微信服务器发送过来的 echostr 的值
                echo $_GET['echostr'];
            }
            exit();

上面代码只需要在验证服务器时执行一次即可,当微信服务器将消息转发过来时,我们不希望执行上面的代码。怎么办呢?

可以通过如下的判断实现

if (isset($_GET['echostr'])) {
     //验证服务器是否可用
  } else {
      //处理微信转发过来的消息
  }

因为只有在验证开发服务器时,微信服务器才会以get形式发送 echostr 等参数,而在转发消息时没有这个参数

如果想知道如何从消息中获取数据,以及如何向用户回复消息,请看下一篇


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

冷启动

冷启动

高臻臻 / 人民邮电出版社 / 2018-5 / 59.80元

本书针对中小企业做营销没预算、没用户的痛点,系统梳理冷启动项目的思维和策略,帮助营销和运营人员实现项目从0到1再到n的爆发式增长。 全书有两条主线。一条是营销思维线,侧重于如何思考,包括:升级行业、创新文化,寻找营销切入点;挖掘品 牌和个人的亮点、“做轻”产品,打造具有互联网营销特色的冷启动项目;突破思维,把实体经济“做虚”,发挥虚拟经济的价值。另一条是营销策略线,侧重于如何行动,包......一起来看看 《冷启动》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具