zoukankan      html  css  js  c++  java
  • 微信公众平台开发(三)

    一、微信公众平台消息交互流程

     作为开发者,我们需要面对的主要有两个对象:微信服务器和应用程序(网站)服务器。

        当微信用户向你的公众平台发送一条消息,实际上这条消息首先发送到微信服务器,由微信服务器向网站服务器发起另外一个请求,网站服务器返回这个请求的结果,再由微信服务器发送到微信客户端。

        整个消息通讯流程如下图:

        

        上述5个步骤中,作为开发者我们主要精力都集中在步骤3上,这个步骤主实际上要有3项任务:

    1. 接收来自2的XML信息
    2. 服务器内部逻辑执行
    3. 组织并返回用于4的XML信息

        上述三项任务我会在后面做详细说明,并提供一整套简单、高效的处理方法。

    转发消息XML格式

    <?xml version="1.0" encoding="utf-8"?>
        <xml>
            <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName>
            <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName>
            <CreateTime>1357986928</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[中文]]></Content>
            <MsgId>5832509444155992350</MsgId>
        </xml>    

    对应节点的官方说明如下:

    参数描述
    ToUserName 开发者微信号
    FromUserName 发送方帐号(一个OpenID)
    CreateTime 消息创建时间 (整型)
    MsgType text
    Content 文本消息内容
    MsgId 消息id,64位整型

        

    返回消息XML格式

    <?xml version="1.0" encoding="utf-8"?>
        <xml>
            <ToUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></ToUserName>
            <FromUserName><![CDATA[gh_a96a4a619366]]></FromUserName>
            <CreateTime>63497820384</CreateTime>
            <MsgType>text</MsgType>
            <Content><![CDATA[您刚才发送了文字信息:中文
            //您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。
            //SDK官方地址:http://weixin.senparc.com]]></Content>
        </xml>    

    对应节点的官方说明如下:

    参数描述
    ToUserName 接收方帐号(收到的OpenID)
    FromUserName 开发者微信号
    CreateTime 消息创建时间
    MsgType text
    Content 回复的消息内容,长度不超过2048字节
    FuncFlag 位0x0001被标志时,星标刚收到的消息。

    一些需要注意和容易被忽视的问题:

    1. 每条XML信息都有大小限制,如文本信息,建议Content内容不要超过600字。
    2. 上图中,步骤2开始之后,微信服务器有一个等待时间:5秒,如果在这个时间内没有进行到步骤4,那么这个请求将会被关闭(包括数据传输的时间)。也就是说如果超过时间,即使网站服务器返回了数据,客户端也无法收到回复。
    3. 在文本消息中,是允许添加<a>标签来放置连接的,但是有许多朋友测试之后发现iOS没问题,Android上链接无法点击,其实原因是(至少目前为止):Android的微信客户端对<a>标签格式的判定比较严格,请严格按照这个格式书写:<a href="http://xxxx">内容</a>,href后不要使用单引号,也不要添加其他属性。
    4. 上面XML节点中的FromUserName即微信用户的OpenId,对于同一个公众账号,这个OpenId的前6位是一致的,并且在整个公众平台的记录中也是唯一的。也就是说同一个用户关注了两个不同的公众账号,他会有两个不同的OpenId。
    5. CreateTime使用的是Unix时间,因此如果使用C#的话,需要做一个转换。
    6. 尽量保持官方API中XML节点的顺序,以前微信服务器是使用节点位置的方式读取信息的(node[0]),而非节点名称,现在这个问题似乎有好转,不过还是要小心(¥…………&%&……)。
    7. 由于这种特殊的通讯方式,(至少目前为止)所有请求必须从客户端先发起,不要指望光使用API或SDK可以实现由网站服务器主动推送消息到客户端(当然其他办法还是有的,比如模拟登陆)。

    WeiXinMessageSDK 源码下载  案例源码

  • 相关阅读:
    open文件操作之mode模式剖析
    super函数没有那么简单-super原理剖析
    mac下 将python2.7改为python3
    《图解http》构建Web内容的技术
    《图解HTTP》Web的攻击技术
    java获取服务器信息
    免费的论文查重网站
    gitlab持续集成,自动部署
    mybatis-plus invalid bound statement (not found) insert解决办法
    锁原理:偏向锁、轻量锁、重量锁
  • 原文地址:https://www.cnblogs.com/zhanghaomars/p/4959833.html
Copyright © 2011-2022 走看看