微信公众号签名错误的排查方法
【摘要】 在使用微信开放标签的时候,需要配置一堆堆相关的配置,其中有一个就是微信签名1.配置开放标签的前置配置参数wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印 appId: '', // 必填,公众号的唯一标识 timestamp: , ...
在使用微信开放标签的时候,需要配置一堆堆相关的配置,其中有一个就是微信签名
1.配置开放标签的前置配置参数
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [], // 必填,需要使用的JS接口列表
openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
});
2.签名的生产规则
微信签名是通过JS-SDK权限签名算法类进行生产的。
首先在生成签名之前必须获取jsapi_ticket这个公众号用于调用微信JS接口的临时票据,正常情况下有效期为7200秒(如果需要处理相关业务需要把这个ticket进行保存,计算时间,超过一定时间后重新进行获取),jsapi_ticket是通过access_token来获取,而access_token正常情况下有效期也是7200秒,access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token,目前本文中使用的是第三方平台获取的(其实计算获取access_token,再用access_token获取jsapi_ticket)。获取了jsapi_ticket,此时就可以通过noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分),并且将这四个参数按照字段名的ASCII 码从小到大排序都转为小写后,按照key1=value1&key2=value2…的形式进行拼接成字符串,再对这个拼接字符串进行sha1加密,注意所有字段名和字段值都需要采用原始值并且不进行URL 转义操作。此时sha1加密后的字符串就是最终的signature签名。
3.微信公众号签名错误的排查方法
即出现invalid signature无效的签名的处理方法。主要是确保查看每个参数是否按照规则要求,是否有空值,或者生成的方法是否正确这些方面,目前排查方法可以从下面几种情况进行排查:
3.1 确认签名算法正确,可使用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验,将参数都获取填写到该页面和自己生产的签名进行比对确认无误。
3.2 确认config中nonceStr(js中驼峰标准大写S), 生成的签名时时间戳timestamp必须与签名中的对应随机字符串noncestr以及生成签名时生成的时间戳timestamp保持一致。
3.3 确认url是页面完整的url(可以在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。
3.4 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。(当时就被坑在两个地方填写的不同appid,坑了好久好久。。。)
3.5 确保一定缓存access_token和jsapi_ticket(这个不一定,需要根据具体情况来进行操作)。
3.6 确保你获取用来签名的url是动态获取的,如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)