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


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

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

  • 相关阅读:
    git/gerrit上已经删除了远程分支,本地仍然能看到的解决方法
    bat中查找文件夹下有几个某类型的文件
    ERROR 1045 (28000)问题解决
    Unsupervised Pretraining Transfers well Across Languages
    由声学特征重建语音波形-声码器的最近进展
    神经机器翻译中有用的技巧
    多语种神经机器翻译
    利用Fairseq训练新的机器翻译模型
    转:Linux 系统忘记密码 -> 修改 Ubuntu 虚拟机密码
    Linux安装与配置Tomcat
  • 原文地址:https://www.cnblogs.com/ydam/p/10983579.html
Copyright © 2020-2023  润新知