微信invalid signature问题排查(nonceStr问题)


  1. 确保你可以正确获取到access token,和js ticket,主要是域名白名单里面要把自己的服务器ip配进去

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

  3. 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

鉴于我是掉进这个坑里的,还不止一次,就主要说说这个问题吧。经过上面的逻辑之后,我们的签名api返回了如下结果到页面:

  ctx.body = {
    noncestr: 'Wm3WZYTPz0wzccnW',
    timestamp: '1414587457',
    signature: hash,
    appId: 'wxe06bdf429f29043'
  }

接下来我们请求到了结果--data,在页面里调用wx.config时:

    // 通过api拿到上面的data
      wx.config({
        ...data,
        jsApiList: ['chooseImage', 'scanQRCode']
      })

一个扩展运算符,是不是非常的方便?现在敲黑板💣了,这里我们在server端计算sha1的时候,用的是noncestr这个字段,所以很自然的以noncestr为字段名返回了,但是:

在页面调用wx.config里面,接收的是nonceStr啊,S是大写啊同学们!!!。在上面栗子中,使用展开运算符得到的结果如下:

      wx.config({
         noncestr: 'Wm3WZYTPz0wzccnW', //这里错了,应该是nonceStr:'Wm3WZYTPz0wzccnW'
         timestamp: '1414587457',
        signature: hash,
        appId: 'wxe06bdf429f29043'
        jsApiList: ['chooseImage', 'scanQRCode']
      })

解决办法有两种,前端改或者后端改返回字段名,最终调用wx.config时传入的要是nonceStr!!

害,能用云开发还是用云开发吧。。https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/web.html

参考: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM