首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》3.3.2 配置失败常见问题与分析

关灯直达底部

提交URL和Token的时候,有时会碰到提交不成功的情况,具体有以下几种。

1.请求URL超时

这种情况一般是由于服务器网速或响应速度太慢。此时可以先重试几次或者等一段时间再试,如果还是这样,则需要考虑更换速度更快、性能更好的服务器。

2.系统发生错误,请稍后重试

这种情况一般是由于微信服务器短时间内的异常引起的,一般重试或者过一段时间尝试即可。

3.Token验证失败

这种情况需要具体分析验证过程被卡在哪一个环节了。此时可以通过调用变量$_SERVER来获取服务器和执行环境信息,以便进行分析。

$_SERVER是一个包含诸如头信息(Header)、路径(Path)及脚本位置(Script Location)等信息的数组。这个数组中的项目由Web服务器创建。若要了解更多关于$_SERVER的信息,可访问官方网站http://www.php.net/manual/zh/reserved.variables.server.php。

这里需要使用以下两个元素。

·$_SERVER['REMOTE_ADDR']:来访者的IP地址,此处为微信服务器的IP地址。

·$_SERVER['QUERY_STRING']:查询请求字符串,此处为微信服务器发过来的GET请求字符串。

将以上两个变量记录到日志中。函数定义如下。


function traceHttp{    $content = date('Y-m-d H:i:s')."/nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"]."/nQUERY_    STRING:".$_SERVER["QUERY_STRING"]."/n/n";        if (isset($_SERVER['HTTP_APPNAME'])){   // SAE        sae_set_display_errors(false);        sae_debug(trim($content));        sae_set_display_errors(true);    }else {        $max_size = 100000;        $log_filename = "log.xml";        if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size))        {unlink($log_filename);}        file_put_contents($log_filename, $content, FILE_APPEND);    }}  

上面代码中,当环境为SAE时,使用SAE的调试函数sae_debug将内容记录到日志中。而在具有读写权限的空间下,使用file_put_contents函数把字符串写入文件。

然后在程序的数据处理之前调用该函数,记录信息,代码如下。


define("TOKEN", "weixin");traceHttp;$wechatObj = new wechatCallbackapiTest;if (isset($_GET['echostr'])) {    $wechatObj->valid;}else{    $wechatObj->responseMsg;}  

当提交URL和Token验证的时候,程序目录下应当生成一个log.xml文件。内容类似如下。


2016-10-10 11:03:21REMOTE_ADDR:101.226.61.144QUERY_STRING:signature=6e35c6f3d3279338781047dbffd09426b9ecdee3&echostr=5979420653038092664&timestamp=1392001400&nonce=1392192345  

下面可以得出初步结论。

没有生成日志文件:微信服务器没有访问到你的服务器,需要先检查你的服务器是否可以通过公网访问,以及URL路径是否正确并且可以访问。如果可以通过公网访问,而微信服务器不能访问,那么可能是防火墙拦截了80端口或微信服务器的IP地址,也可能是服务器所在区域与微信服务器通信不畅,需要更换服务器。

已经生成日志文件:查看REMOTE_ADDR和QUERY_STRING的内容是否与上述类似。确认signature、timestamp、nonce、echostr等4个参数都有值。如果这些都没有问题,则检查程序中定义的Token值是否与提交的一致,再检查程序流程及数据处理是否与官方文档描述的一致。

如果确定以上均没有问题,可以使用下面章节中的微信调试器进行测试,它提供了更为宽松的校验方式,并且可以实时输出当前的XML数据供调试时参考。