微信公众号分享 和 分享时出现invalid signature签名错误解决办法

2 篇文章 0 订阅
本文详细介绍了在使用微信JS-SDK时遇到`invalidsignature`签名错误的常见原因及解决步骤,包括检查签名算法、nonceStr、timestamp、url的一致性,确保appid与jsapi_ticket的对应,动态获取url,以及配置JS接口安全域名等。同时,提供了在线签名验证工具和本地测试未果时的处理建议。
摘要由CSDN通过智能技术生成
 console.log("=== location ===", location, _this)
  var url= location.href.split('#')[0];
  console.log("======================",url)
  $.ajax({
      type : "POST",
      url : "后台接口路径",
      dataType : "json",
      data : {
          appUrl: encodeURIComponent(url),
          appCode:'aaaaaaaaaaaaaaaa',
      },
      success : function(res) {
          console.log('res', res)
          if (res.flag==='success') {
              var _appId = res.defmap.appId;
              var _timestamp = res.defmap.timestamp;
              var _nonceStr = res.defmap.nonceStr;
              var _signature = res.defmap.signature;
              wx.config({
                  debug: false,
                  appId: _appId,
                  timestamp: _timestamp,
                  nonceStr: _nonceStr,
                  signature: _signature,
                  jsApiList: [
                      'onMenuShareTimeline',
                      'onMenuShareAppMessage',
                      'updateAppMessageShareData'
                  ]
              });

              wx.ready(function () {
                wx.checkJsApi({
                  jsApiList: [
                    'onMenuShareAppMessage',
                    'onMenuShareTimeline',
                    'updateAppMessageShareData'
                  ], // 需要检测的JS接口列表,所有JS接口列表见附录2,
                  success: function(res) {
                    console.log('checkJsApi:', res)
                    if (res.checkResult.updateAppMessageShareData || res.checkResult.onMenuShareAppMessage) {

                        wx.updateAppMessageShareData({
                          title: title, // 分享标题
                          desc: desc, // 分享描述
                          link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                          imgUrl: '', // 分享图标(完整的图片路径)
                          success: function (data) {
                            // 设置成功
                            console.log('updateAppMessageShareData success:', data);
                          },
                          fail: function(error) {
                            console.log('updateAppMessageShareData error:', error);
                          }
                        });
                    }
                  }
                });
              });

              wx.error(function (res) {
                  console.log('config失败',res)
                  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
              });
          }
      },
  });

 

invalid signature签名错误时,解决办法。

invalid signature签名错误建议按如下顺序检查:


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


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



(3)确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。



(4)确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。



(5)确保一定缓存access_token和jsapi_ticket。



(6)确保你获取用来签名的url是动态获取的。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。



(7)查看微信公众号---公众号设置---功能设置---JS接口安全域名是否配置了分享路径和请求路径的域名



(8)按上面步骤检查都没有问题,但是本地测试一直报invalid signature签名错误时,可以上传到服务器试试。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值