微信公众号签名错误的排查方法

举报
多米诺的古牌 发表于 2021/12/26 23:15:00 2021/12/26
【摘要】 在使用微信开放标签的时候,需要配置一堆堆相关的配置,其中有一个就是微信签名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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。