微信公众号开发出现的一个不常见的bug

      昨天又遇到微信开发过程中出现了一个隐性问题,虽说已解决了,还是有必要记录一下,昨天找了网上竟然没有较为准确的解决方案。

      背景:由于我的服务器是有一个Apache做后台动态脚本解析,前段时间改造了一下,用NGINX做外部端口映射,主要是不同域名要在一台机子上共用一个https端口,NGINX天生可以做这种分发和反向代理的优势。所以昨天测试微信的分享和上传图片都出现问题,出现“invalid signature” 。

      首先前端打印出签名的信息,无异常,然后我就上公众号后台也查看了js的域名也没填错,一直经受微信的莫名bug含糊提示的痛苦。查了一些网上资料,大多都是一些没设置的或者大小写问题之类的,很快我ssh 上去我的服务器,找到微信的类库,从底层打印,依然可以签名出来,并无异常。最后没办法就用微信的签名检验接口:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 。后面发现接口签名后的信息与我服务器签名的信息不一样,问题来了,查了sha1是采用自身语言的,而且之前还好好的,那就想了最近的改动,很快锁定域名及目录的可用性。由于微信给的sdk是自动获取请求头,自动拼接,外部我是请求:https://www.xxx.com/xx/yyy/ss 但是微信sdk获取的是http://www.xxx.com/xx/yyy/ss ,我试了把协议头改为https,问题马上解决了,原来nginx转发请求的时候是http请求,所以微信自动获取的自然也是http,而不是前端请求的https了。

以下是网上别人常见的几个问题:

1、前端wx.config配置中的nonceStr字段名称的's'是大写。但是后台生成签名的noncestr字段的‘s’是小写,千万要注意!

2、时间戳(timestamp)值要记住精确到秒,不是毫秒。如果是php 就采用time();

3、生成签名的url(使用jssdk的页面地址,这个页面地址可以在浏览器访问),包含“?”号后面的所有参数,不包含“#”号后面的值。

4、invalid url domain:

js接口安全域名错误。可以到微信后台查看安全域是否设置正确

5、invalid signature:

要么是jsapi_ticket错误,要么是签名算法问题,要么是算法的参数有问题,注意noncestr中的's'是小写的。如果都是对的。那就是前端传的url有问题了。我是估计这个问题,只是表面看不出

6、permission denied:

这个问题一般是没有接口权限的问题,有的接口是要认证之后才可以使用,当然,测试号不会有这个问题



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值