只讨论低权限帐号,高端帐号请绕道…

能做什么?不能做什么?

应答机,自主查询机都能做,但由于没法主动推送(除非你能拿到很高的权限),所以呢,什么预警系统的,一时半刻做不了

机制

基本流程

用户发信息  -->微信服务器-->我们的服务器

用户显示信息<--微信服务器<--

#如果是图文信息,就有额外的通信

用户访问图文-->我们的服务器

基本限制

开发文档

  • 所有都是基于http,服务器发给你的是xml,你响应的也是xml
  • 必须在5秒内响应,必须是合法格式
  • xml的节点名与文档必须完全一样
  • 文本信息必须小于2k字节
  • 图文信息每次最多10个”作品”,每个都有标题,简单描述,图片链接,链接
  • 图文信息的图,是直接访问你的服务器然后显示
  • 注意图片的缓存问题,同一个URL在多次响应中,是不会重复访问

goweixin的那些代码

项目地址https://github.com/wendal/goweixin

核心代码之一,签名校验

func Verify(token string, timestamp string, nonce string, signature string) bool {
    if DevMode {
        return true
    }
    strs := []string{token, timestamp, nonce}
    sort.Strings(strs)                 //需要按值进行排序,蛋疼不?
    key := strs[0] + strs[1] + strs[2] //接着拼起来 
    if _Debug {
        log.Println("Verify key=", key)
    }
    h := sha1.New()                    //然后算sha1
    h.Write([]byte(key))
    re := fmt.Sprintf("%x", h.Sum(nil))
    if _Debug {
        log.Println("Verify", signature, re)
    }
    return signature == re            // golang嘛,字符串直接比较值
}

一点提醒

  1. 使用bluestacks在电脑上安装微信,可以抛开手机进行调试
  2. 一定一定要把生成的xml打印出来检测哦,错误的响应,微信不会有任何提示!!

实例消息

订阅通知

<xml><ToUserName><![CDATA[gh_2dc74cccf555]]></ToUserName>
<FromUserName><![CDATA[oSmHgjqYZN7zD4pOjsb_jK88wKFs]]></FromUserName>
<CreateTime>1372736407</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[]]></EventKey>
</xml>

文本信息

<xml><ToUserName><![CDATA[gh_2dc74cccf555]]></ToUserName>
<FromUserName><![CDATA[oSmHgjqYZN7zD4pOjsb_jK88wKFs]]></FromUserName>
<CreateTime>1372736658</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[演示信息]]></Content>
<MsgId>5895859052130344107</MsgId>
</xml>

文本响应

<Content><![CDATA[Hi,
你好啊
]]></Content>
<xml>
<FromUserName><![CDATA[gh_2dc74cccf555]]></FromUserName>
<ToUserName><![CDATA[oSmHgjqYZN7zD4pOjsb_jK88wKFs]]></ToUserName>
<MsgType><![CDATA[text]]></MsgType>
<CreateTime>1372736571</CreateTime>
<FuncFlag>0</FuncFlag>
</xml>

图文响应

<xml>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount><![CDATA[6]]></ArticleCount>
<Articles><item><Title><![CDATA[北京达诺视通]]></Title>
<PicUrl><![CDATA[http://www.danoonetworks.com/css/imgs/logo.png]]></PicUrl>
<Url><![CDATA[http://www.danoonetworks.net]]></Url>
</item>
<item><Title><![CDATA[V1 2013-07-02 11:42:03]]></Title>
<PicUrl><![CDATA[http://wx.wendal.net/snap/zhaoxun/1372737416.jpg?id=8589943729]]></PicUrl>
<Url><![CDATA[http://wx.wendal.net/snap/zhaoxun/index.html?id=8589943729]]></Url>
</item>
<item><Title><![CDATA[VZ 2013-07-02 11:56:01]]></Title>
<PicUrl><![CDATA[http://wx.wendal.net/snap/zhaoxun/1372737416.jpg?id=8589943893]]></PicUrl>
<Url><![CDATA[http://wx.wendal.net/snap/zhaoxun/index.html?id=8589943893]]></Url>
</item>
<item><Title><![CDATA[V2 2013-06-26 10:47:08]]></Title>
<PicUrl><![CDATA[http://wx.wendal.net/snap/zhaoxun/1372737416.jpg?id=8589941622]]></PicUrl>
<Url><![CDATA[http://wx.wendal.net/snap/zhaoxun/index.html?id=8589941622]]></Url>
</item>
<item><Title><![CDATA[V3 2013-07-02 11:56:04]]></Title>
<PicUrl><![CDATA[http://wx.wendal.net/snap/zhaoxun/1372737416.jpg?id=8589935214]]></PicUrl>
<Url><![CDATA[http://wx.wendal.net/snap/zhaoxun/index.html?id=8589935214]]></Url>
</item>
<item><Title><![CDATA[V4 2013-07-02 11:42:23]]></Title>
<PicUrl><![CDATA[http://wx.wendal.net/snap/zhaoxun/1372737416.jpg?id=8589956309]]></PicUrl>
<Url><![CDATA[http://wx.wendal.net/snap/zhaoxun/index.html?id=8589956309]]></Url>
</item>
</Articles>
<FromUserName><![CDATA[gh_2dc74cccf555]]></FromUserName>
<ToUserName><![CDATA[oSmHgjqYZN7zD4pOjsb_jK88wKFs]]></ToUserName>
<CreateTime>1372737330</CreateTime>
<FuncFlag>0</FuncFlag>
</xml>


blog comments powered by Disqus

Published

2013-07-02

Categories


Tags

Fork me on GitHub