Code Bye

本地服务器和微信服务器的具体通信过程是怎样的

switch($RX_TYPE)
 {
   case "text":
         $i=1;                   
         $this->responseText($postObj, $i);
         $i=$i+1;                    
         sleep(3);                    
          break;

手机发送一条文本,过了3秒收到了一个1,那么证明是代码全部执行之后才发送给微信服务器的,但是代码全部执行之后$i的值应该是2了啊,为什么还是1。
假如是在

 $this->responseText($postObj, $i);

这里就发送给微信服务器了,那为什么会延时3秒?
本人现在遇到的问题是:用了新浪SAE,录入数据库的系统总是会有重复的,看开发者文档,说:
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
关于重试的消息排重,推荐使用msgid排重。
假设服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

这个具体怎么操作呢?
附上responseText函数:

    
public function responseText($object, $content)
{
	$msgType = "text";
	$resultStr = sprintf($GLOBALS["textTpl"], $object->FromUserName, $object->ToUserName, time(), $msgType, $content);
        echo $resultStr;
}
解决方案

40

你的responseText方法的作用就是直接输出结果,你一开始传参的时候传的不就是1吗?
至于延迟3秒本人也不知道题主为什么要这么设计
还有就是重复的问题,你可以在接受到消息后把消息的MsgID保存好,假如下一条消息的MsgID也这个一样就忽略掉,假如不一样就通过,并把这MsgID保存好

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明本地服务器和微信服务器的具体通信过程是怎样的