微信公众平台开发小结
只讨论低权限帐号,高端帐号请绕道…
能做什么?不能做什么?
应答机,自主查询机都能做,但由于没法主动推送(除非你能拿到很高的权限),所以呢,什么预警系统的,一时半刻做不了
机制
基本流程
用户发信息 -->微信服务器-->我们的服务器
用户显示信息<--微信服务器<--
#如果是图文信息,就有额外的通信
用户访问图文-->我们的服务器
基本限制
- 所有都是基于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嘛,字符串直接比较值
}
一点提醒
- 使用bluestacks在电脑上安装微信,可以抛开手机进行调试
- 一定一定要把生成的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