微信JS-SDK说明文档
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
生成签名
1.签名规则
参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。
对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。
这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
2.注意事项
1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2.签名用的url必须是调用JS接口页面的完整URL。
3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。
4.调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。小程序无需配置IP白名单。
3.签名逻辑
所知,签名字段有noncestr,jsapi_ticket,timestamp,url。那这四个值怎么来呢?
noncestr:随机字符串,可以直接生成。
string nonceStr=Guid.NewGuid().ToString("N");
jsapi_ticket:公众号用于调用微信JS接口的临时票据(签名密钥)。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
获取jsapi_ticket时就要用到access_token了,access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。
我们可以通过下面的接口取得access_token
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
这里要用到3个参数(grant_type,appid,secret);
参数
是否必须
说明
grant_type
是
获取access_token填写client_credential
appid
是
第三方用户唯一凭证
secret
是
第三方用户唯一凭证密钥,即appsecret
其中,grant_type的值即为client_credential,AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。
我在上篇随笔记录了AppID和AppSecret的获取方式,链接如下:
https://www.cnblogs.com/p1024q/p/11321864.html
正常情况下,微信会返回如下JSON数据
{"access_token":"ACCESS_TOKEN","expires_in":7200}