沈阳微信公众号开发和沈阳微信网页开发的区别和要点
一、 沈阳微信公众号开发公众号AccessToken
1 access_token是使用公众号的 AppID 和AppSecret,通过后台调用接口获取的。
2 前提条件:获取时access_token时运行的服务器ip地址需要添加到公众号的IP白名单上。
3 access_token具有有效时间通过expires_in获得,有效时间到达前要注意刷新。
4 access_token对于公众号是全局唯一的,一旦刷新,旧的就不能用了。所以要注意的是,如果你有多个应用,或者一个应用里多个模块的代码都使用同一个公众号access_token时,不能各自为政,比如每个调用的地方 都有access_token的实例,并且在它get方法里,判断是否过期过期则自动刷新,这样就会导致互相覆盖。应该建立一个全局唯一的运行代码来获取access_token,能自动更新并对外提供。
二、沈阳微信网页授权access_token
1 网页授权的需求场景是用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
2 前提条件:公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,填写授权回调域名,即网页的域名。
3 网页跳转到微信的授权页面,用户点击同意授权后 跳回开发者指定网页,用页面参数中的code传给服务端,服务端用code调用有关接口就可以获得网页授权access_token。从这里可以看出网页授权access_token和公众号基础支持的access_token有很大不同。
1)公众号access_token是全局唯一的,网页授权access_token是当前用户访问网页时产生的,仅对当前该用户有效。
2)公众号access_token可以通过后台直接调用微信接口获取,网页授权access_token则必须用户在授权页面同意授权后才能获取code,然后后台才能通过code得到网页授权access_token。
三、 公众号的参数签名和微信网页的参数签名
这个其实是我想重点吐槽的。因为这两者似是而非,表面很像,一般而言我们也觉得应该一样,因为没有必要搞得不一样啊,徒增了开发成本,但实际却又确实不一样,所以我猜测是不是微信的开发人员内部之间没有协调好导致的。我们来分析一下:
1 公众号的:
1) 将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
2 微信网页的:
1)对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串
2) 对字符串进行sha1签名,得到signature
对于第二步,都是对拼接好的字符串进行sha1加密,一样的,就不用多说了。关键是这第一步。公众号的第一步,是将参加签名的参数的值(注意是值)按ASCII 码从小到大进行排序然后拼接在一起,而网页签名,则是按参数名称(注意是参数名称)ASCII 码从小到大进行排序,然后用 参数名=参数值&参数名=参数值...这样的方式拼接起来。
3 其实还有个细致的地方,公众号的参数里的随机数 参数名是nonce,而微信网页的参数里随机数参数名是 nonceStr,时间戳呢,大家都叫timestamp。很多时候我们在做微信网页的签名时,以为和公众号的一样,就把代码搬过来,结果悲剧了,有时搞半天都不知道问题在哪。