验证成功,但关注后无法收到回复消息!

来源:3-2 接收事件订阅与回复响应消息(二)

85Ryan

2018-06-14 22:52

要崩溃了,折腾了一天,还是不能关注回复成功,但是验证是成功的。xml 模板中也将所有的空格删除了!以下是完整代码,哪位大神看一下哪里出问题了,谢谢!

    public function api()
    {
        // 获得验证参数
        $nonce      = $_GET[ 'nonce' ];
        $timestamp  = $_GET[ 'timestamp' ];
        $token      = 'wechat';
        $echostr    = $_GET[ 'echostr' ];
        $signature  = $_GET[ 'signature' ];
        
        // 形成数组并按字典排序
        $array      = array();
        $array      = array( $nonce, $timestamp, $token );
        sort( $array );
        // 拼接字符串并 sha1 加密,然后校验
        $str = sha1( implode( $array ) );
        if ( $str == $signature  && $echostr ) {
            echo $echostr;
            exit;
        } else {
            $this->responseMsg();
        }
    }
    // 接受事件推送并回复
    public function responseMsg()
    {
        // 获取微信推送 post 数据(xml 格式)
        $postArr = $GLOBALS["HTTP_RAW_POST_DATA"];
        libxml_disable_entity_loader(true);
        // 处理消息,并设置回复类型及内容
        $postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
        // $postObj->ToUserName = '';
        // $postObj->FromUserName = '';
        // $postObj->CreateTime = '';
        // $postObj->MsgType = '';
        // $postObj->Event = '';
        // 判断事件推送:订阅
        if ( strtolower( $postObj->MsgType  == 'event' ) ) {
            if ( strtolower ( $postObj->Event == 'subscribe' ) ) {
                // 设置回复消息
                $toUser     = $postObj->FromUserName;
                $fromUser   = $postObj->ToUserName;
                $sendTime     = time();
                $msgType        = 'text';
                $content        = 'hahahahahahah';
                $template       = '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>';
                $msg = sprintf( $template, $toUser, $fromUser, $sendTime, $msgType, $content );
                echo $msg;
            }
        }
    }


写回答 关注

3回答

  • 85Ryan
    2018-06-15 10:34:20

    另外,我用的 Laravel 框架!

  • 85Ryan
    2018-06-15 10:14:34

    解决了,找到原因了,只做一次验证就行,没必要做两次验证!

    qq_涵养_...

    就是这个原因,第一次做了验证之后,就把验证的代码注释掉,就行了

    2019-05-03 17:58:18

    共 2 条回复 >

  • 85Ryan
    2018-06-14 23:01:29
    $postArr = $GLOBALS["HTTP_RAW_POST_DATA"];

    改为:

    $postArr = file_get_contents('php://input');

    也没回复!


PHP实现微信公众平台开发—提升篇

本课程详细讲解了接收微信用户发送的消息和接收订阅关注的事件推送

64947 学习 · 267 问题

查看课程

相似问题