1. 简要说明

无需微信认证也能推送,本文主要说明用户关注公众号的事件推送详细流程

2.过程说明

2.1 配置公众号服务器地址–确保5秒内 微信访问你的接口能走完

2.2 确保配置的接口能够访问,用户关注公众号动作完成之后会向这个推送消息

2.3 推送进来的数据如下

2.4 可以拿到用户的openid,可以进行被动消息回复

2.5 返回消息的xml  <xml><ToUserName><![CDATA[openid]]></ToUserName><FromUserName><![CDATA[gh_37e867c80ce2]]></FromUserName><CreateTime>1732958184</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[内容]]></Content></xml> 必须返回如此格式才能完成推送

3.代码

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $postStr = file_get_contents('php://input');
//            trace("获取消息通知--开始",'alert');
//            trace($postStr,'alert');
//            trace("获取消息通知--结束",'alert');
            if (!empty($postStr)){
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $array = json_decode(json_encode($postObj), true);
                //        trace("打印消息通知", 'alert');
                //        trace($postStr, 'alert');
                //        trace($array, 'alert');
                //        trace("打印消息通知结束------", 'alert');
                if (isset($array['MsgType']) && $array['MsgType'] == 'event') {
                    if ($array['Event'] == 'subscribe') {
                        //   $array = [
                        //            'ToUserName' => 'gh_37e867c80ce2',
                        //            'FromUserName' => '213',//关注用户的openid
                        //            'CreateTime' => '1732950709',
                        //            'MsgType' => 'event',
                        //            'Event' => 'subscribe',
                        //            'EventKey' =>
                        //                array (
                        //                ),
                        //            'Encrypt' => '4Zb5N/ZJ2tqeBKgD4=',
                        //        ];
                        //获取openid
                        $mpOpenid = $array['FromUserName'];
                        //给用户返回一个带参数的网址
                        $domain = config('extra.domain');
                        $url = $domain . '/mp/bind.html?openid=' . $mpOpenid;
                        $content = $url . '请在该页面绑定您的小程序账户';
                        //通过接口发送消息
                        $this->sendText($array, $content);
//                        echo "success";
                    }
                }
public function sendText($array, $content)
{
    $toUsername = $array['FromUserName'];
    $fromUsername = $array['ToUserName'];
    $time = $array['CreateTime'];
    $msgType = 'text';
    $XML = "<ToUserName><![CDATA[$toUsername]]></ToUserName><FromUserName><![CDATA[$fromUsername]]></FromUserName><CreateTime>$time</CreateTime><MsgType><![CDATA[$msgType]]></MsgType><Content><![CDATA[$content]]></Content>";
    $XML = "<xml>$XML</xml>";
    echo $XML;
}