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

简介:

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

  • 确认签名算法正确,可用 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:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
     });

 

后台代码:

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

 



本文转自王磊的博客博客园博客,原文链接:http://www.cnblogs.com/vipstone/p/6732660.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
移动开发 小程序 API
微信外部浏览器或短信链接唤起微信小程序的解决方案
微信外部浏览器或短信链接唤起微信小程序的解决方案
138 1
|
3月前
|
存储 自然语言处理 数据安全/隐私保护
微信公众号后台回复5s重试解决方案和思路
微信公众号后台回复5s重试解决方案和思路
67 0
|
小程序 JavaScript 数据可视化
微信小程序innerHTML解决方案
小程序项目开发中有这么一个需求,接口返回 <div>abc<p>123</p></div> 字符串,然后在小程序页面显示。
微信小程序innerHTML解决方案
|
1月前
|
JSON 小程序 C#
微信网页授权之使用完整服务解决方案
微信网页授权之使用完整服务解决方案
|
3月前
|
小程序 JavaScript 数据可视化
微信小程序innerHTML解决方案
微信小程序innerHTML解决方案
|
5月前
|
算法 API Go
微信小游戏获取用户相关api返回签名错误87009的解决方案
微信小游戏获取用户相关api返回签名错误87009的解决方案
|
9月前
|
JSON 小程序 前端开发
微信小程序学习实录2(下拉刷新、下拉加载更多、小程序事件、PHP后端代码、刷新无数据解决方案)
微信小程序学习实录2(下拉刷新、下拉加载更多、小程序事件、PHP后端代码、刷新无数据解决方案)
305 0
|
9月前
layui框架实战案例(4):因内容安全策略导致弹出层模态框无法正常显示微信公众号文章使用window.open的解决方案
layui框架实战案例(4):因内容安全策略导致弹出层模态框无法正常显示微信公众号文章使用window.open的解决方案
39 1
|
9月前
|
数据采集 移动开发 前端开发
漏刻有时数据可视化大屏数据采集工具(2):百度人脸识别调用微信摄像头ajax上传识别的解决方案
漏刻有时数据可视化大屏数据采集工具(2):百度人脸识别调用微信摄像头ajax上传识别的解决方案
67 0
|
9月前
微信公众号扫码条形码和二维码后用split函数按照条码类型进行截取处理的解决方案
微信公众号扫码条形码和二维码后用split函数按照条码类型进行截取处理的解决方案
49 0

热门文章

最新文章