微信Web开发之config:invalid signature

config:invalid signature可以按以下方法排查

    1. JS接口安全域名设置问题:应该只包含域名,比如https://i.cnblogs.com 的域名是i.cnblogs.com

    2. wx.config配置参数相关的要求
      1. 时间戳(timestamp)值精确到秒,不是毫秒
      2. nonceStr字段名称的's'是大写。
      3. appid 与获取 jsapi_ticket 使用的appid 必须相同
      4. 进行签名(加密)的URL
        1. 对于加密的URL,包括https://或http://和?后面包括的参数,不能包括#之后的内容。
          比如:
          加密的URL是:http://abc.com/a.html?adasd=1#localion
          那么正确的加密URL应该是:http://abc.com/a.html?adasd=1
        2. 前端发送到后端进行sha1加密的url是当前js页面的URL,不是获取验证签名的接口URL
          比如: 
          当前页面URL是   http://abc.com/a.html 
          获取appId、timestamp、nonceStr、signature的URL接口是   http://abc.com/aaa/getSignature.html
          那么进行加密的URL应该是 http://abc.com/a.html 
        3. 后端获取用来加密的URL要动态获取。
    3. 需要缓存access_token和jsapi_ticket,不然可能因为每次获取时刷新了不同的值,导致验证失败。
    4. 用户授权回调之后,页面路径会添加两个参数:code和state
      比如:

      授权后跳转页面为:http://abc.com
      则添加参数后会变成:

      http://abc.com?code=asdasd&state=STATE

      如果直接使用location.href.split('#')[0]获取当前页面的URL,会把state当成一个查询的参数导致错误
      正确的获取签名URL:encodeURIComponent(location.href.split('#')[0])
    5. 签名算法出现错误:
      使用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具校验
    6. 服务器ip没有在白名单上
      公众号后台->基本配置->设置IP白名单
    7. 超过了每日的access_token获取上限,token过期后签名失败
    8. 反向代理没有设置正确
      nginx配置反向代理代码:
      proxy_set_header Host $http_host;
posted @ 2019-08-02 11:58  Rookie_Programmer  阅读(3887)  评论(0编辑  收藏  举报