微信公众平台开发,微信JS-SDK对接invalid signature报错解决
问题说明
笔者在做微信JS-SDK学习过程中,用微信打开页面时总是弹出invalid signature的errmsg,很是让人困扰,笔者是跟着慕课上的视频一步步跟着做的,视频中老师挺流畅,可是到我这就error。于是,笔者在开发文档和网友提供的解决方法中苦苦搜寻,好在功夫不负有心人,经历一上午的苦苦挣扎,现总结解决方案如下:
解决方案
1.首先当然是根据开发文档排查错误(确认域名绑定正确,如果不准确会提示invalid domain),微信开发文档中将可能发生的错误以及解决办法列举的很详细,这个我不再赘述。 详情参考官方文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
解释一下,文档中的所有待签名参数按照字段名的ASCII 码从小到大排序(字典序),这句话的意思是对noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 这四个字段进行排序,只需按照文档中的顺序照着写即可,我相信有些人会跟我一样的困惑。
2.确认确认签名算法正确,在你的程序的http请求中找到下面两行代码:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
然后将true改为false
原因:通过查询curl用法我们可以看到上面两行代码是配置curl是否使用ssl的带证书(https协议)访问,一般我们是没有安装证书的(http协议),所以将true改为false就好!
3.再次查看开发文档的红色文字发现,他要求确保你获取用来签名的url是动态获取的,而笔者跟着视频中用的是静态url地址,改成下面代码后,终于看到了梦寐以求的OK!!!(根据网友提问来看,绝大多数都是此类问题)
$protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
$url = $protocol.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];