微信JS SDK invalid signature 避坑指南

前言:最近开始接触微信小程序的后台,遇到各种各样的问题,各种查资料,今天终于解决了一个大问题,记录一下。
   首先贴一下微信官方的教程 微信官方教程。按照这个步骤一步一步走下去,根据公众号appid获取token,根据token获取ticket,根据ticket获取signature(代码就不贴了,代码网上太多了),按理说应该是没问题的,然而,前台一运行,invalid signature,有没有搞错???
接下来说说坑。
1、 确保公众号通过认证
认证是否通过决定着拥有什么样的权限( 官方权限说明),认证菜单为设置-微信认证
2、 公众号关联小程序
我们是公众号关联的小程序,不确定未关联的小程序能不能行,最好关联。设置菜单为小程序-小程序管理-关联
3、 设置白名单
我们的写好的后台发布之后放在一台服务器上,那么这台服务器必须要在微信的白名单中,否则是访问不到的。设置菜单为基本配置-IP白名单-查看-修改。
4、 代码跨域处理
我们在测试页面放在一台有域名的服务器上,而后台程序放在另一台没有域名的服务器上,中间的访问时跨域的,所以要进行跨域处理。ASP.Net Core MVC的跨域处理是在startup.cs中处理的(后台使用的是盛派的框架)
微信JSSDKinvalidsignature避坑指南
 
5、 需要域名
我们的测试页面放在一台有域名的服务器上(微信规定),实际上微信官方的文档中使用JSSDK的第一步就是绑定域名。绑定域名菜单为设置-公众号设置-JS接口安全域名。
6、 设置反向代理nginx
在你查看了所有其他配置项都没问题的情况下,很有可能是反向代理未设置的问题导致的该错误,修改nginx文件,本机路径为D/Program Files/nginx-1.11.10/conf/nginx.conf,修改格式如下( 参考链接):
server {
        listen       80;
        server_name  test.test.com;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_read_timeout 300;
            proxy_connect_timeout 300;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For                    $proxy_add_x_forwarded_for;                        
            proxy_set_header Host $http_host;
            proxy_redirect off;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
反向代理原理可参看( 反向代理原理
7、 尝试普通的url和进行encodeURIComponent之后的url
微信官方的文档说的是生成signature的url是需要进行encodeURIComponent的,但是很多人反馈在进行了编码之后反而会发生该错误,所以这个问题很可能是微信的一个bug,介意两者都可以进行尝试。值得注意的是,不管url进不进行编码,微信都推荐用location.href.split('#')[0]进行获取。
8、其他坑
搜索微信JSSDK的过程中,你会看到很多其他人遇到的坑,但是本文并没有遇到,比如nonceStr中的s要大写等等。希望大家遇到问题多问度娘。
结语:上述八点如果每一条都详细说的话,都有很多图要截取,本文就不一一去截图了,因为在其他地方一搜索就能看到。本次教程就分享到这里,下次再会。
-----------------------------------------------------------------------------
2019.5.13更新:
最近JSSDK突然又出现了问题invalid signature,微信的东西咋这么不稳定的,太操蛋了。因为调用JSSDK的时候是要向后端传url的,为了查看后端用的url是不是和前端传过来的一致,就从后端返回了url,一看,竟然不一样,于是修改方法,这样invalid signature被修复了,但是又出现invalid domain,有没有搞错,我们明明配置了域名,也设置ip白名单,而且配置一直没改过。折腾了好久,终于看到一篇文章中写道:在生成signature时, 要使用公众号(订阅号也可以)的AppID和AppSecret, 不能使用微信小程序的AppID和AppSecret, 否则就会出现上述问题.于是,更改,终于好了。
总结:
1、遇到invalid signature,就看下前后端使用的url是否一致
2、遇到invalid domain,确实是否使用公众号的appid去获取的access token,继而生成的signature。
吐槽:看到很多博客写的获取的access token用的appid要和小程序配置中的appid一致,简直扯淡,害人不浅。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGIS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值