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保存好
至于延迟3秒本人也不知道题主为什么要这么设计
还有就是重复的问题,你可以在接受到消息后把消息的MsgID保存好,假如下一条消息的MsgID也这个一样就忽略掉,假如不一样就通过,并把这MsgID保存好