当前位置:首页 > 微信 > 正文内容

微信分享JSSDK-invalid signature签名错误的解决方案

canca2年前 (2023-07-14)微信495

核对官方步骤,确认签名算法。

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

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

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

  • 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

  • 确保一定缓存access_token和jsapi_ticket。

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

签名是正确,上面的步骤还没能解决你的问题(invalid signature)那就用是url的问题,注意:微信公众号必须配置了你调试的安全域名(可以配置二级域名:xxx.com,而不用配置多个a.xxx.com/b.xxx.com等)。

原因:微信分享时候会给你当前页面添加多个参数,你sha1时候必须保证url地址是微信给你加了参数之后的地址,这样才不会报config:invalid signature.

解决方案:sha1之前url必须是解码之后的正常的肉眼直接能识别的url,如果你用的是静态页面,在你配置wx.config之前,先通过encodeURIComponent(location.href.split('#')[0])把当前url编码传递到后台,后台通过decodeURIComponent解码,核心代码如下:

前台html页面,编码传递url:

jQuery.post("/xxx", {"url": encodeURIComponent(window.location.href.split('#')[0]),"t": new Date().getTime()}, function (result) {
    if (result.errno != 0) {
        alert("您当前的网络不稳定请稍后再试!");
        return;
    }
    var shareUrl = result.data.url;
    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: 'xxx', // 必填,公众号的唯一标识
        timestamp: result.data.timestamp, // 必填,生成签名的时间戳
        nonceStr: result.data.nonceStr, // 必填,生成签名的随机串
        signature: result.data.signature,// 必填,签名,见附录1
        jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });

后台代码:

let url = decodeURIComponent( this.post().url);  //重点,解码前台传递url
//当前时间戳
let timestamp = parseInt( new Date().getTime()/1000);
//随机字符串
let nonceStr = Math.random().toString(36).substr(2,16);


扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/854.html

分享给朋友:

“微信分享JSSDK-invalid signature签名错误的解决方案” 的相关文章

微信支付默认关注公众号

微信支付有四种支付方式:刷卡支付,公众号支付,扫码支付,APP支付;前三种支付方式有默认关注公众号功能,APP支付需要额外申请。微信支付成功后推荐默认自动关注的规则有以下几点:刷卡支付默认有推荐关注公众号支付和扫码支付需要5元以上才有推荐关注APP支付默认没有,需要申请配置,需要有一定用户规模才可以...

微信APP统一支付二签方法

微信APP支付二签方法/**  * 2 二次签名返回给APP  */ $signParam = array(     'appid' => $resu...

微信支付中的p12证书提取公钥、私钥、证书、序列号等

今天做微信支付开发,然后产品给我了相应的商户号、apikey、公众号、p12证书等等。说准备工作都已经做好了,可以进行开发了。但是我看微信文档里没有提到p12证书,都是pem证书。怎么办,百度吧。        原来我们...

公众号支付报错:“当前页面的URL未注册”

公众号支付报错:“当前页面的URL未注册”

问题公众号支付报错:“当前页面的URL未注册”解决方案一句话概述请检查下单接口中使用的商户号是否在商户平台配置了对应的支付目录。可能原因及详细解决方案可能导致该报错的原因以及详细的解决方案如下一、支付目录设置问题1.1支付授权目录说明支付授权目录: 商户最后请求拉起微信支付收银台的页面地址我们称之为...

spring boot整合第三方微信开发工具 weixin-java-miniapp 实现小程序微信登录

有时候项目需要用到微信登录或获取用户的手机号码,weixin-java-miniapp是一个好用的第三方工具,不用我们自己写httpcline调用。导入jar包       <dependency>  &n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。