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; }