微信公众号分享时,提示invalid signature,签名错误

摘要:
(3) 确认该url是页面的完整url(请在当前页面警报(location.href.split('#')[0])上确认)。(4) 确认config中的appid用于获取jsapi_票证的应用ID是一致的。对于动态页面,请参考示例代码中的PHP实现。如果它是一个静态html页面,url将通过前端的ajax传输到后台进行签名。

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

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的各项功能了

免责声明:文章转载自《微信公众号分享时,提示invalid signature,签名错误》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇flex 只显示年、月的日期选择控件(TimeChooser)SQL语句查询每个分组的前N条记录的实现方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shiro细节、默认的过滤器、匹配模式和顺序

部分细节 [urls] 部分的配置,其格式是:“url=拦截器[参数],拦截器[参数]”; 如果当前请求的url匹配[urls] 部分的某个url模式,将会执行其配置的拦截器。 anon(anonymous)拦截器表示匿名访问(即不需要登录即可访问) authc(authentication)拦截器表示需要身份认证通过后才能访问 shiro中默认的过滤...

xxl-job编写GULE(Java)运行模式,带执行参数(url)

packagecom.xxl.job.service.handler; importcom.xxl.job.core.log.XxlJobLogger; importcom.xxl.job.core.biz.model.ReturnT; importcom.xxl.job.core.handler.IJobHandler; public class q...

浅谈前端SPA(单页面应用)

    单页Web应用(single page web application,SPA): SPA 是一种特殊的 Web 应用,是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的。它将所有的活动局限于一个 Web 页面中,仅在该 Web 页面初始化时加载相应的 HTML 、 JavaScript 、 CSS 。一旦页面加载完成, SPA...

Redis 存储图片 [base64/url/path]vs[object]

一、base64图片编解码 基本流程:从网络获取下载一张图片。然后base64编码,再base64解码,存到本地E盘根文件夹下。 import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.F...

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】

前言 最近LZ给项目框架升级, 从Spring1.x升级到Spring2.x, 在这里就不多赘述两个版本之间的区别以及升级的原因。 关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里。 这里我们讨论一个关于URL中包含双斜杠被拦截的问题。 发现问题 升级框架之后,测试一个功能时,发现报错Http 500, 第一时间怀疑...

【转载】Vue+原生App混合开发

项目的大致需求就是做一个App,里面集成各种功能供用户使用,其中涉及到很多Vue的使用方法,单独总结太麻烦,所以通过这几篇笔记来梳理一下。原型图如下: 路由配置 主界面会用到一些原生App方法,比如验证用户身份等,故由原生App完成,进去的每个模块则全部都是HTML页面(有一种后端工作好轻松的感觉 ̄へ ̄)。由于传统的HTML页面开发起来效率太低,所以我选...