收藏
回答

微信公众号开发调用jssdk,配置时总是 invalid signature ,提示非法签名?

首先贴上必要信息:

开发者ID(AppID):wx3806a4c78e7bf173

原始ID:gh_2314fcde77a4



以上是公众号本身的配置

接下来放一下,我这边的config代码

const modeList = [
  'updateAppMessageShareData',
  'updateTimelineShareData',
  'onMenuShareAppMessage',
  'onMenuShareTimeline',
];
 
const initConfig = async (res) => {
  const options = {
    debug: !isProd,
    appId: res.appId, // 必填,公众号的唯一标识
    timestamp: res.timestamp, // 必填,生成签名的时间戳
    nonceStr: res.nonceStr, // 必填,生成签名的随机串
    signature: res.signature, // 必填,签名,见附录1
    jsApiList: modeList,
  }
  console.log('config options::----------------------------', options);
  wx.config(options);
  // ready
  wx.ready(() => {
    console.log('config success::----------------------------');
    // 分享到朋友圈
    wx.updateTimelineShareData({
      title: '', // 分享标题
      link: '', // 分享链接
      imgUrl: '', // 分享图标
      success: function () {
        // 用户确认分享后执行的回调函数
      },
      cancel: function () {
        // 用户取消分享后执行的回调函数
      },
    });
    // 分享给朋友
    wx.updateAppMessageShareData({
      title: '', // 分享标题
      link: '', // 分享链接
      imgUrl: '', // 分享图标
      desc: '', // 分享描述
      success: function () {
        // 用户确认分享后执行的回调函数
      },
      cancel: function () {
        // 用户取消分享后执行的回调函数
      },
    });
  })
  // error
  wx.error((res) => {
    console.log('catch config error :: =============== ::', res);
  })
}

以上代码执行之后出现如下问题

{
  errMsg: "config:fail,Error: 系统错误,错误码:63002,invalid signature [20190919 17:06:41][]"
  jsApiList: []
}

差了错误代码之后,发现是非法签名,好了,我先去了https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign这个校验网站校验了,signature 没有问题两边一致,但是config一直提示非法。

然后我去了https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html这边看常见解决办法。试了个遍。然而并没有效果,另外,恕我直言这个文档真实辣鸡。可能你们的核心已经是小程序了,但是小程序的BUG也一堆没修。


然后吐槽一下,这个错误码的返回,之前有返回过config:fail,Error: 系统错误,错误码:63002,invalid signature [20190919 17:06:41][undefind] 这样的格式,还不容易变成 config:fail,Error: 系统错误,错误码:63002,invalid signature [20190919 17:06:41][] 这样我也不知道啥问题,就这几个参数,咱写写明白行不,URL错就提示URL错,就一个签名错误???wtf,这里太笼统了!

好了说到URL错,好网上说99%的错误都是URL导致的,好的尝试了各种办法,并没有什么用,已经调试了不知道几天了,最后只能哀求官方帮我解决一下,帮我看看问题到底在哪里,头发都要秃了。

我用的是SPA (vue) HASH模式(https://xxx.com/#/)取得地址为 https://xxx.com/

单凡我有一点办法都不会来这请教

综上,请赐教!求快速反馈!

顺便吐槽,标题为什么一定要问号,我就是个陈述句,阐述问题而已!

回答关注问题邀请回答
收藏

25 个回答

  • 梦想家haima
    梦想家haima
    2020-01-01

    你凶啥子凶嘛,这么多程序员读着屎一样的破文档,重来没有说不开发了,还是得一段乱试,都是过来人,习惯就好了嘛。嗯,屎一样的破文档

    2020-01-01
    有用 7
    回复 1
    • Iuhuy
      Iuhuy
      2020-06-22
      你凶啥子个嘛
      2020-06-22
      回复
  • 95
    95
    2020-02-16

    楼主 我现在也是 生成的签名和微信工具生成的签名一样 就还是invalid signature,有时间回答一下吗

    2020-02-16
    有用 3
    回复
  • 浅羊
    浅羊
    07-02

    留给后人的评论:若出现

    invalid signature
    

    错误,要么是生成signature的算法有问题,要么是用来生成的参数有问题。

    用微信 JS 接口签名校验工具https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign核对一下。如果核对结果一致,代表你用这些参数拼接并sha1签名的过程没有错,问题就出现在这些参数身上。

    noncestr,timestamp一般没啥问题。其他参数可能的问题:

    1. url有没有正确处理。url为当前网页的URL,不包含#及其后面部分。(确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。)
    2. jsapi_ticket获取错误。可能因为获取ticket的access_token有问题。比如获取token的算法有误,用来获取的AppId或AppSecret错了(比如配置了多个公众号,写错了等等)
    07-02
    有用 2
    回复
  • Crowley
    Crowley
    2019-09-19
    1. 确认一下微信公众号的appId是否对应

    2. jsapi_ticket是否过期

    3. url传的是否有问题,先urlencode一下再给后端

    2019-09-19
    有用 2
    回复 16
    • 小顾同学在行动
      小顾同学在行动
      2019-09-19
      appId对应;jsapi_ticket定时刷新;url不管是encode的还是没encode的都试过了,常规方法我都试过,我需要一些有突破性的建议
      2019-09-19
      1
      回复
    • Crowley
      Crowley
      2019-09-19回复小顾同学在行动
      前端一般保证url没有问题就不会有问题,贴一下后端生成签名的代码
      2019-09-19
      回复
    • 小顾同学在行动
      小顾同学在行动
      2019-09-19
      const timestamp = parseInt(new Date().getTime()/1000)
      const nonceStr = uuid.v1().replace(/-/g, '')
      const sha1 = jsapiTicket => {
            const url = params.url
            const md5sum = crypto.SHA1(`jsapi_ticket=${jsapiTicket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`)
            return md5sum.toString()
      }
      sha1(jsapiTicket)


      2019-09-19
      回复
    • Crowley
      Crowley
      2019-09-19回复小顾同学在行动
      前端传encode的过去,后端decode一下,推荐顺序不要写死,微信验签都这一套写个公用方法好一点,再有就是把jsapiTicket的appid一起传过去吧,尽量不要前端写死
      2019-09-19
      回复
    • Crowley
      Crowley
      2019-09-19
      测试的时候你每次都把相关的所有变量都返回给前端,看一下有没有不对应的
      2019-09-19
      回复
    查看更多(11)
  • 小程序商城定制开发2600元全包
    小程序商城定制开发2600元全包
    05-06

    都是苦命的秃头猿

    05-06
    有用 1
    回复
  • Jacob
    Jacob
    2020-01-14

    我的原因是服务器时间调到过去的时间了,你可以确认一下

    2020-01-14
    有用 1
    回复 3
    • Immortal
      Immortal
      2020-05-06
      调到过去是啥意思?
      2020-05-06
      回复
    • .
      .
      04-28
      老哥,我服务器时间也调过,因为要测试活动时间,后来再调回去还是不行,请问下你是怎么好的
      04-28
      回复
    • .
      .
      04-28
      改好了,谢谢老哥,启发很大
      04-28
      回复
  • 孙志钢¹¹
    孙志钢¹¹
    06-21

    如果签名算法验证过没有问题,url也是一致的,appid也是正确的,那么看看你获取jsapi_ticket的链接中的type是不是jsapi,可能多数人都是这个问题。

    "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi"%(access_token)

    06-21
    有用
    回复
  • 千山慕雪
    千山慕雪
    04-15

    请问什么情况下wx.config会报 config:system error错误啊?第一次遇见,wx服务器崩了?

    04-15
    有用
    回复
  • 李鑫泉
    李鑫泉
    03-17

    两天了 这个问题 一直报错


    03-17
    有用
    回复
  • C1v3t
    C1v3t
    02-09

    我遇到的情况是这样解决的

    在main.js里设置一下刚进入页面的url

    if (navigator.userAgent.indexOf('iPhone') !== -1) {

      window.wechaturl = window.location + ''

    }

    在获取签名的接口请求时做判断

    uri = isiOS ? window.wechaturl : window.location.href // ios手机不一样


    02-09
    有用
    回复

正在加载...

登录 后发表内容
问题标签