惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
The Cloudflare Blog
IT之家
IT之家
V
V2EX
雷峰网
雷峰网
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
S
SegmentFault 最新的问题
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
小众软件
小众软件
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
A
About on SuperTechFans
B
Blog
月光博客
月光博客
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI

博客园 - zhuzhipeng

工作难找,我在江心洲摆野串,靠一个工具活下来了 约课系统-约刻 Mysql数据库导出数据字典文档Word或者HTML的3个工具 Linux 中 FTP的安装、apache安装并且设置apache的根目录为ftp用户的根目录 mysql中查看所有表、表字段、表注释、字段注释 mybatis-generator自动生成代码插件使用详解 CentOS7安装MySQL maven远程下载失败 手动导包到本地仓库 Linux文件权限一:普通权限(rwx) Git 恢复本地误删的文件 Windows安装Redis(转!) Git忽略已经提交过一次文件Git忽略文件 Intellij IDEA调试功能使用总结(step over / step into / force step into/step out等) Maven配置阿里云中心仓库 简单请求,复杂请求 ubuntu所有php扩展php-7.0扩展列表 Spring Boot整合UEditor不修改源码 beetl模版for循环渲染字符串 Springboot中IDE支持两种打包方式,即jar包和war包
微信公众号分享时,提示invalid signature,签名错误
zhuzhipeng · 2020-01-13 · via 博客园 - zhuzhipeng

按照微信公众平台的开发文档,签名错误排查方法如下:

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

通过微信签名工具验证,完全符合。前端config 的nonceStr 也无写法错误,非常纳闷。

如果后台返回的config 信息 与微信签名工具校验一致的话,那很有可能是前端访问的url和后台生成签名的url不一致导致,

通过前后台打印分析,url 地址完全一致。我做的是前端传递url给后台,后台接收到的url参与生成签名。这时候注意到,前端传递的url地址是经过 encodeURIComponent的,所以后台接收到需要 decode 一下,比如php 可以用urldecode 函数,再一尝试,成功。。。。。。。

总结如果出现 invalid signature,首先可以确定的是你的签名算法有问题。

签名错误的排查可以这样来:

1:确保基本的appid 正确,获取的access_token和jsapi_ticket 正确

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

3:如果签名一致,那问题基本出在浏览器访问的url和参与生成签名的url不一致。

最后附上jssdk的步骤

1:在微信公众号后台配置js 安全域名,即需要引入jssdk的页面域名。 需要在域名根目录下放置微信的检测文件。

2:配置出ip白名单

3:后台开发人员生成签名传递给前台

4:前端页面引入script方式 jssdk文件

5:通过ajax获取config 配置,完成config 配置后即可使用jssdk的各项功能了