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