微信分享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:

 

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);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC操作Excel2003的CRange类的Copy函数和Delete函数实现方法

一、CRange类的Copy函数实现方法 具体步骤: 1.实例化一个CRange类对象range1,关联你要拷贝的区域; 2.实例化一个CRange类对象range2,关联你要将要粘贴到的区域; 3.调用前一个range1对象的Copy函数,就可…

Django代码编写规范

1. 编码声明 在 Python 解释器执行代码时,需要告诉解释器代码的编码方式。Python 代码实际上是文本数据,如果代码的编码方式与解释器读取的编码方式不一致,将会因编码错误,代码无法执行。Python 2 解释器读取代码时,默…

Get sdcard directory by adb

解决方案: adb shell echo $EXTERNAL_STORAGE I am making an application, which pulls files(Saved by android app) from the device sdcard by adb. The problem is that different devices, have various sdcard directories i.e: sdcardsdcard/external_sdFi…

VueJs开发笔记—IDE选择和优化、框架特性、数据调用、路由选项及使用

一、IDE的选择: VsCode和WebStorm都是不错的选择,说一下两者的优缺点,调试便捷性来说两者不相上下. WebStorm缺点:性能方面VsCode远好于WebStorm; WebStorm优点:代码引用追踪Ws有VsCode无,控制台…

MFC新建文件夹、打开文件夹的实现方法

一、 MFC新建文件夹到指定路径的实现方法 典例: 二、 MFC保存文件到指定路径的实现方法 典例: 三、 MFC打开指定路径的文件夹的实现方法 典例: 注意:ShellExecute函数还可以打开指定路径的普通文件或者可执行文件。

VueJs生产环境部署

VueJs为客户端语言,所以部署的时候是不需要基于nodejs或其他服务器运行环境,只需要像其他静态站点的方式发布就可以了,下面介绍一下VueJs具体发布的流程还有需要注意的点。 先来看VueJs最终生成的文件目录: 具体的步骤如下&#x…

a20隐藏底部按钮及隐藏状态栏和虚拟按键栏

2019独角兽企业重金招聘Python工程师标准>>> 隐藏RecentButton按钮: 在源码android4.2/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java的makeStatusBarView()方法中添加(这是全志androi…

如何计算一个网段的子网掩码,网络ID,广播地址和可用IP地址数

1.判断两个IP在不在一个网段,主要看这两个IP的网络ID,如果网络ID相同则这两个IP在同一网段 示例:判断192.168.0.11/26 和 192.168.0.111/26在不在同一网段 首先计算两个IP的网络ID: 192.168.0.11/26 子网掩码(2进…

WebApi开启CORS支持跨域POST

概念:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 现象:如请…

MFC中CString类字符串与长整型、浮点型、字符数组char数据之间的相互转换

一、长整型数据与CString类字符串相互转换 1.将长整型数据转换为CString字符串类 CString str; long ld; str.Format(_T("%ld"),ld); 2.将CString字符串类转换为长整型数据 CString str; long ld; ld_wtol(str); _wtol()在<stdlib.h> and <wchar.h>…

SSH2 后端编程思路总结

课程快结束了&#xff0c;那我就总结一下利用SSH2框架设计网站后端的思路吧。网站的后端设计大部分操作都是数据的存取&#xff0c;那么就总结一下Strut2中后端操作以及几点要注意的事项吧。后端操作&#xff1a;后端的操作基本上都是在Model、Action以及Service中完成的&#…

如何给APP开发属于自己的小程序

前言 工欲善其事&#xff0c;必先利其器。 首先&#xff0c;我们需要知道微信小程序是什么&#xff1f;微信小程序内核是什么&#xff1f;微信小程序的开发语言什么&#xff1f;这样才能更好的开发微信小程序&#xff0c;以及解决遇到的问题。 一、微信小程序是什么 微信小程…

Xamarin开发笔记—WebView双项事件调用

1.Xamarin调用WebView&#xff1a; 原理&#xff1a;Xamarin.Forms WebView内置方法xx.Eval(..)可以调用到页面里面的js函数。 WebView展示的代码如下&#xff1a; var htmlSource new HtmlWebViewSource();htmlSource.Html "<html><head><meta charse…

数据仓库入门(实验10)在Excel中查询层次结构

一、连接到SSAS二、导入数据三、选择数值、行标签、列标签1. 选择数值2. 选择行标签3. 选择列标签四、过滤五、完成转载于:https://blog.51cto.com/jimshu/1339522

MFC中CString类字符串用法小结

一、 赋值运算 二、 比较运算 注意&#xff1a;如果s1小于s2;则z等于-1&#xff1b;如果s1大于s2;则z等于1&#xff1b;如果s1等于s2;则z等于0&#xff1b; 三、 删除函数 四、 插入函数 五、 计算字符总个数函数 更加详细内容参考VS2010 MSDN

设置 Google Analytics(分析)全局网站统计代码

设置 Google Analytics&#xff08;分析&#xff09;全局网站统计代码 本文包含的主题&#xff1a; 基本说明根据您的网站类型设置数据收集验证您的全局网站代码是否正常工作相关资源 基本说明 无论您要从哪些网站收集数据&#xff0c;如果您尚未为每个目标网站分别创建 Goog…

Xamarin开发笔记—百度在线语音合成

续《是时候开始用C#快速开发移动应用了》刷屏之后&#xff0c;把C#开发移动应用的技术 > Xamarin&#xff0c;在这里和大家做一个分享&#xff01; 语音合成&#xff1a;也被称为文本转换技术&#xff08;TTS&#xff09;&#xff0c;它是将计算机自己产生的、或外部输入的…

《Oracle comment on注释信息方法论》

更多精彩内容尽在leonarding.blog.51cto.com《Oracle comment on注释信息方法论》引言&#xff1a;在DBA日常工作中写注释信息可能会经常有&#xff0c;但用Oracle命令来写和使用我想应该不是很多&#xff0c;其实Oracle给我们提供了非常丰富的语言表述语法&#xff0c;而我们日…

利用MFC按钮使能(或禁用)属性使按钮变正常色(或灰色)

利用MFC按钮使能&#xff08;或禁用&#xff09;属性使按钮变正常色&#xff08;或灰色&#xff09; GetDlgItem(IDC_XXX)->EnableWindow(FALSE)//IDC_XXX为你想变灰的按钮的ID 利用你找到的handle&#xff0c;或者窗体&#xff08;按钮也是一个窗体&#xff09;指针&#…

js处理16进制hex转str出现的中文乱码问题

昨天從FB下載了一份包含所有對話紀錄的JSON檔&#xff0c;但裡面的中文字編碼有問題&#xff0c;通通變成下面這個樣子 "\u00e7\u0094\u009f\u00e6\u0097\u00a5"本來想說這種事情應該很簡單&#xff0c;就把他每個字元當成char轉存不就得了&#xff0c;結果轉出來的東…