情况是这样的,自己负责开发的微信公众号一直有用微信的jssdk来获取用户的位置信息,本来好好的,可突然有一天发现出现了invalid signature无效签名的错误。心里那个郁闷,就开始想是不是谁改了获取jsApiTicket的算法和生成签名的算法,可是经过排查都没发现有修改过。纠结了好久,甚至怀疑是微信的问题,幻想着突然会没问题(太可笑了)。
郁闷了好久,才发现原来是路径的问题,因为自己之前有遇到过invalid URL的错误,所以就先入为主地认为路径问题就应该报invalid URL ,坑爹啊。至于路径为什么会突然变了呢?
StringBuffer fullUrl=request.getRequestURL(); //请求路径
String queryString = request.getQueryString(); //查询参数
if(StringUtil.isNotEmpty(queryString)){
fullUrl.append("?");
fullUrl.append(queryString);
} //这是我获取路径的代码,代码是一直没变的
原来是nginx的配置变了,被改成了这样
upstream weixind01 {
#ip_hash;
#server 127.0.0.1:8120 weight=5; #tomcat2ַ[1;44r
server 127.0.0.1:8130 weight=5; #tomcat3ĵͶ˿[1;44r
server 127.0.0.1:8140 weight=5; #tomcat4ַ[1;44r
}
那么StringBuffer fullUrl=request.getRequestURL(); 获得 就是 http://weixind01/****** ,但是服务器的域名是weixind01.bppc.com.cn ,故此真实的请求路径是 http://weixind01.bppc.com.cn/****** ,因此真实的请求路径与拿去生成签名的路径是不对的,就出现了invalid signature错误。
解决办法 :只需要把nginx的配置改成 upstream weixind01.bppc.com.cn {
#ip_hash;
#server 127.0.0.1:8120 weight=5; #tomcat2ַ[1;44r
server 127.0.0.1:8130 weight=5; #tomcat3ĵͶ˿[1;44r
server 127.0.0.1:8140 weight=5; #tomcat4ַ[1;44r
}
总结 :不能先入为主,一定要认真排查每个可能存在问题的原因,还有同事间要多交流,不然真的坑惨了。