问题说明:
开发微信服务号码的时候,在微信后台成功设置了自己的服务器地址,但是在微信上发送信息后马上说:“这个公众号暂时不能提供服务。 请稍后再试一次。”虽然最初可以,但发现PHP门户文件没有运行。
这个问题的奇怪之处在于,最初微信号正常返回信息。 但后来看到的彩环,微信总是说:“这个公众号暂时不能提供服务。 请稍后再试一次”,然后查看nginx下的access.log就知道有要求。
140.207.54.79---[ 08/Jan/20153360203360463360580800 ] ' post/signature=843506 c7d 2451087 BF7timestamp=1420200
故障排除步骤:
PHP代码问题?
最初以为是PHP代码错误还是有异常,但是即使看到nginx上的error.log也没有记录,所以排除。
PHP环境问题?
在出现上述问题之前,最近的操作更改了php.ini文件的配置,但如果观察PHP的相关进程,则会发现运行正常。 此外,通过脚本模拟微信请求也可以获得正确的预期回报。 所以排除在外。
相关的脚本如下。
#! /usr/bin/envphp
//*
*微信服务标签辅助脚本
*
*模拟向服务器发送微信文本消息
*
*@authordogstar2015-01-08
*/
if($argc
echo'Usage:$argv[0]nn ';
die (;
}
$host=$argv[1];
$content=$argv[2];
$ch=curl_init (;
$xml='
1419757723
6097812988731466682
';
$ header [ ]=' content-type : text/XML; charset=utf-8 ';
$ header [ ]=' content-length : '.strlen ($ XML );
CURL_setopt($ch,CURLOPT_URL,$host );
CURL_setopt($ch,CURLOPT_HTTPHEADER,$header );
CURL_setopt($ch,CURLOPT_RETURNTRANSFER,true );
CURL_setopt($ch,CURLOPT_POST,true );
CURL_setopt($ch,CURLOPT_POSTFIELDS,$xml );
CURL_setopt($ch,CURLOPT_HEADER,0 );
$RES=curl_exec($ch );
echo$res,'nn ';
调用和结果如下
$./send _ we chat _ text.PHP http://XXX.com.cn/demo
1420723897
0
Nginx环境问题?
一边用tcpdump抓住包,一边突然注意到了。 能看到Nginx返回的状态代码的果然不是200,而是499。 在网上稍作调查后,发现499的两个原因是客户端放弃了请求或服务器断开了请求。 但是,服务器显然没有超时,所以不会自己断开连接,也不会在微信规定的5秒内做出响应。 那到底是什么原因导致客户放弃了请求呢?
域名解析问题!
最后,(通过在上海的同学)绑定的域名表示在广东境内访问正常,但在上海的访问需要备案。 而且对应的回报也是499。 提示如下。
最终解决方案:
重新绑定域名可以解决问题。