核对官方步骤,确认签名算法。javascript
签名是正确,上面的步骤还没能解决你的问题(invalid signature)那就用是url的问题,注意:微信公众号必须配置了你调试的安全域名(能够配置二级域名:xxx.com,而不用配置多个a.xxx.com/b.xxx.com等)。php
缘由:微信分享时候会给你当前页面添加多个参数,你sha1时候必须保证url地址是微信给你加了参数以后的地址,这样才不会报config:invalid signature.html
解决方案:sha1以前url必须是解码以后的正常的肉眼直接能识别的url,若是你用的是静态页面,在你配置wx.config以前,先经过encodeURIComponent(location.href.split('#')[0])把当前url编码传递到后台,后台经过decodeURIComponent解码,核心代码以下:前端
前台html页面,编码传递url:java
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 });
后台代码:ajax
let url = decodeURIComponent( this.post().url); //重点,解码前台传递url //当前时间戳 let timestamp = parseInt( new Date().getTime()/1000); //随机字符串 let nonceStr = Math.random().toString(36).substr(2,16);