微信JSSDK录音失败,invalid signature 签名失效

1,908 阅读1分钟

在微信环境调用 jssdk,调用开始录音接口 wx.startRecord()录音,安卓系统可以正常调用,但iOS系统无反应,记录一下解决问题的过程: 1、首先监听失败事件,查看调用失败的错误信息

wx.startRecord({
  success: function (res) {
      console.log('record fail')
  },
  fail: function (error) {
      console.log(error)
  }
})

微信弹出错误信息startRecord:invalid signature,如下图:

2、在网上查找了导致签名错误可能有哪些原因

- 确保基本的appid 正确,获取的access_token和jsapi_ticket 正确

- 校验签名,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

- 如果签名一致,那问题基本出在浏览器访问的url和参与生成签名的url不一致。

参考链接:https://www.jianshu.com/p/341e80e21383

3、项目的签名是由NodeJS处理,前端请求当前服务,基本可以排除域名不一致的问题。在打印微信jssdk config时,发现打印结果如下图:

其中发现有一项值为url: xxx,而路径值为当前页的上一页,推断来看,项目中前端使用的Vue.js框架为单页应用,签名有可能是在A页面生成后,通过$router.push()进入页面B,所以点击录音使用了上一个页面生成的签名,与当前页url不一致,而导致的签名失效

解决思路:在通过其他页进入录音界面时,重新获取当前页面路径下的签名,最终将上一页中的this.$router.push()改为window.location.href跳转至录音页,使录音页可以重新获取签名