微信扫码,公众号被动回复了消息连续两次,第一次是服务出现故障的提示,第二次是正确的回复,怎么回事?
发布于 6 年前 作者 amo 1481 次浏览 来自 问答

公众号开发:

步骤:

  1. 服务器创建了临时二维码
  2. 用户微信扫码,进入公众号聊天界面(已关注)
  3. 服务器被动推送扫码事件消息,告知用户登陆成功

问题:

服务器只接收到了一条事件消息,我在服务器储存了Log日志记录,然后用户却收到了两条消息,第一条是提示“该公众号暂时无法提供服务,请稍后再试”,第二条是正确的服务器回复消息“登录成功”,如下图所示。

第一条提示的消息不知道怎么来的??而且在公众号后台运维中心-日志查询,是查不到任何记录的。

背景:

最开始开发的是完全正常的,不会返回两条消息。但是最近我们项目迁移了服务器,迁移过后,就出现了这样的问题。

后台是PHP,传输时加密安全模式。

部分代码如下:

public function responseMsg()
    {
        $xml_str = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");
        // \Log::info($xml_str);
        if (empty($xml_str) || empty($_REQUEST)) {
            $this->noRes();
            die('');
        }
        if (!empty($xml_str)) {
            $res = new \stdClass;
            $errCode = self::$wxBizMsgCrypt->decryptMsg($_REQUEST['msg_signature'], $_REQUEST['timestamp'], $_REQUEST['nonce'], $xml_str, $res);
            \Log::info('res:' . json_encode($res, JSON_FORCE_OBJECT) . $errCode);
            if ($errCode == 0) {
                switch ($res->MsgType) {
                    case 'event':
                        //判断具体的时间类型(关注、取消、点击)
                        $event = $res->Event;
                        if ($event == 'SCAN') {
                            if ($res->EventKey == 'admin_login') {
                                // 后台系统绑定登陆 查询处理一些事情后,执行$this->sendText()
                                $this->backSystemLogin($res);
                            } elseif ($res->EventKey == 'admin_bind') {
                                $this->backSystemBind($res);
                            } else {
                                $this->noRes();
                            }
                        } else {
                          // ......
                        }
                        break;
                    case 'text'//文本消息
                        $this->noRes();
                        break;
                    default:
                        # code...
                        $this->noRes();
                        break;
                }
            } else {
                $this->noRes();
                die('');
            }
        }
    }

private function sendText($text, $to, $from)
    {
        $format = "
        
        
        %s
        
        
      ";
        $xmlText = sprintf($format, $to, $from, time(), $text);
        $encryptMsg = '';
        $errorCode = self::$wxBizMsgCrypt->encryptMsg($xmlText, $_REQUEST['timestamp'], $_REQUEST['nonce'], $encryptMsg);
        if (!empty($encryptMsg)) {
            // \Log::info('encrypt:' . $encryptMsg);
            echo $encryptMsg;
        } else {
            // \Log::info('errCOde:' . $errorCode);
            $this->noRes();
            die('');
        }
    }

    private function noRes()
    {
        $encryptMsg = '';
        $errorCode = self::$wxBizMsgCrypt->encryptMsg('success', $_REQUEST['timestamp'], $_REQUEST['nonce'], $encryptMsg);
        if (!empty($encryptMsg)) {
            echo $encryptMsg;
        } else {
            die('');
        }
    }
回到顶部