曲径通幽论坛

标题: JSSDK config:invalid signature 签名错误 [打印本页]

作者: beyes    时间: 2017-4-1 21:07
标题: JSSDK config:invalid signature 签名错误
在配置微信 JSSDK 中的 wx.config 时,虽然根据微信 JSSDK 开发文档给出的 demo 来操作,似乎没任何问题,但是总是莫名其妙的出现 config:invalid signature 错误提示。后来经过验证,错误源自 jssdk.php demo 程序:
  1. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  2. $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
复制代码


需要改为:
  1. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  2. $url = "$protocol$_SERVER[SERVER_NAME]$_SERVER[REQUEST_URI]";
复制代码


即 HTTP_HOST 改为 SERVER_NAME 即可。
HTTP_HOST 和 SERVER_NAME 的异同:
相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范
不同点:
1. 通常情况:
_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。
2. 当服务器为非80端口时:
_SERVER["HTTP_HOST"] 会输出端口号,例如:mimiz.cn:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT
3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:
<virtualhost *>
ServerName mimiz.cn
ServerAlias www.mimiz.cn
</virtualhost>
客户端访问域名 www.mimiz.cn
_SERVER["HTTP_HOST"] 输出 www.mimiz.cn
_SERVER["SERVER_NAME"] 输出 mimiz.cn
所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2