网站首页微信开发

数据收发原理及消息数据格式

发布时间:2015-12-04编辑:admin阅读(502)

    在开发者首次提交验证申请时,微信服务器会发送GET请求到填写的URL里,并且带上四个参数(signaturetimestampnonceechostr),开发者通过对签名(signature)的效验,来判断该消息的真实性。

       

    开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

    参数

    描述

    signature

    微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

    timestamp

    时间戳

    nonce

    随机数

    echostr

    随机字符串

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

    加密/校验流程如下:1. tokentimestampnonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

    加密/校验流程如下:1. tokentimestampnonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    检验signaturePHP示例代码:

    private function checkSignature()
    {
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"]; 
                     
          $token = TOKEN;
          $tmpArr = array($token, $timestamp, $nonce);
          sort($tmpArr, SORT_STRING);
          $tmpStr = implode( $tmpArr );
          $tmpStr = sha1( $tmpStr );
    
          if( $tmpStr == $signature ){
               return true;
          }else{
               return false;
          }
    }

    验证URL有效性成功后即接入生效,成为开发者。如果公众号类型为服务号(订阅号只能使用普通消息接口),可以在公众平台网站中申请认证,认证成功的服务号将获得众多接口权限,以满足开发者需求。

    此后用户每次向公众号发送消息、或者产生自定义菜单点击事件时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,然后开发者可以依据自身业务逻辑进行响应,例如回复消息等。

    公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。

    用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID

    此外,由于开发者经常有需在多个平台(移动应用、网站、公众帐号)之间共通用户帐号,统一帐号体系的需求,微信开放平台(open.weixin.qq.com)提供了UnionID机制。开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个应用(移动应用、网站应用和公众帐号,公众帐号只有在被绑定到微信开放平台帐号下后,才会获取UnionID),可通过获取用户基本信息中的UnionID来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的UnionID是唯一的。换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。详情请在微信开放平台的资源中心-移动应用开发-微信登录-授权关系接口调用指引-获取用户个人信息(UnionID机制)中查看。

    另请注意,微信公众号接口只支持80接口。

    用户在发送一个你好后,微信服务器将发送一个消息发送给我们自己的服务器,自己的服务器然后回复一个我很好,并且将该回复也按一定的规则组装,回复给公众账号,公众账号再回复给用户,在这个收发过程中,发送方和接收方进行了调换(ToUserNameFromUserName值互换),收发都是以xml格式在后台进行传输的,

    各消息类型的推送XML数据包结构如下:

    文本消息

        

    参数

    描述

    ToUserName

    开发者微信号

    FromUserName

    发送方帐号(一个OpenID

    CreateTime

    消息创建时间 (整型)

    MsgType

    text

    Content

    文本消息内容

    MsgId

    消息id64位整型

     

    图片消息

       

    参数

    描述

    ToUserName

    开发者微信号

    FromUserName

    发送方帐号(一个OpenID

    CreateTime

    消息创建时间 (整型)

    MsgType

    image

    PicUrl

    图片链接

    MediaId

    图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

    MsgId

    消息id64位整型

     

    语音消息

     

    参数

    描述

    ToUserName

    开发者微信号

    FromUserName

    发送方帐号(一个OpenID

    CreateTime

    消息创建时间 (整型)

    MsgType

    语音为voice

    MediaId

    语音消息媒体id,可以调用多媒体文件下载接口拉取数据。

    Format

    语音格式,如amrspeex

    MsgID

    消息id64位整型

    请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:

     

    多出的字段中,Format为语音格式,一般为amrRecognition为语音识别结果,使用UTF8编码。

    视频消息

     

    参数

    描述

    ToUserName

    开发者微信号

    FromUserName

    发送方帐号(一个OpenID

    CreateTime

    消息创建时间 (整型)

    MsgType

    视频为video

    MediaId

    视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

    ThumbMediaId

    视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

    MsgId

    消息id64位整型

     

    小视频消息

     

    参数

    描述

    ToUserName

    开发者微信号

    FromUserName

    发送方帐号(一个OpenID

    CreateTime

    消息创建时间 (整型)

    MsgType

    小视频为shortvideo

    MediaId

    视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

    ThumbMediaId

    视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

    MsgId

    消息id64位整型

    地理位置消息

     

    参数

    描述

    ToUserName

    开发者微信号

    FromUserName

    发送方帐号(一个OpenID

    CreateTime

    消息创建时间 (整型)

    MsgType

    location

    Location_X

    地理位置维度

    Location_Y

    地理位置经度

    Scale

    地图缩放大小

    Label

    地理位置信息

    MsgId

    消息id64位整型

    链接消息

     

    参数

    描述

    ToUserName

    接收方微信号

    FromUserName

    发送方微信号,若为普通用户,则是一个OpenID

    CreateTime

    消息创建时间

    MsgType

    消息类型,link

    Title

    消息标题

    Description

    消息描述

    Url

    消息链接

    MsgId

    消息id64位整型

     



    收录情况:百度已收录,点击查看详情
    本文地址:http://luvial.cn/content/10054.html
    转载请保留原文地址!

    如果您觉得本文对您有帮助,且您有经济能力,欢迎捐助本站
标签: 微信收发原理 微信开发
上一篇:没有了
下一篇:1元包1月可用爱奇艺会员活动(活动已结束)