要实现微信公众号消息回复,需完成接入验证并处理文本、图文消息。1. 接入验证:收到含signature、timestamp、nonce、echostr的GET请求后,将token、timestamp、nonce排序后SHA1加密,与signature比对,一致则返回echostr。2. 接收消息:通过php://input获取POST的XML数据,解析FromUserName、ToUserName、MsgType等字段。3. 回复文本:构造包含ToUserName、FromUserName、CreateTime、MsgType为text、Content的XML返回。4. 回复图文:设置MsgType为news,ArticleCount为图文数量,Articles下用item节点包含Title、Description、PicUrl、Url,最多8条。确保URL可访问、token一致即可完成对接。

要让 PHP 实现微信公众号的消息回复,包括接入验证和处理文本、图文消息,核心在于理解微信服务器的通信机制。微信通过一个唯一的 URL 接收和响应消息,这个 URL 需要由你的 PHP 程序提供支持。
微信在配置服务器 URL 时会发送 GET 请求进行验证,你需要正确响应 echostr 参数。
验证流程如下:
$token = 'your_token'; // 自定义 token
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$echostr = $_GET['echostr'];
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
echo $echostr;
exit;
}
验证通过后,微信会将用户发送的消息以 POST 方式推送给你。你需要解析 XML 数据,并根据消息类型返回对应内容。
立即学习“PHP免费学习笔记(深入)”;
关键点:
$postData = file_get_contents("php://input");
if (!empty($postData)) {
$msg = simplexml_load_string($postData, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUser = $msg->FromUserName;
$toUser = $msg->ToUserName;
$msgType = $msg->MsgType;
if ($msgType == 'text') {
$content = '你发送的是:' . $msg->Content;
$reply = "
<xml>
<ToUserName><![CDATA[{$fromUser}]></ToUserName>
<FromUserName><![CDATA[{$toUser}]></FromUserName>
<CreateTime>" . time() . "</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{$content}]></Content>
</xml>";
echo $reply;
}
}
当需要回复图文消息时,MsgType 设为 news,并按微信规范组织 ArticleCount 和 Articles 节点。
注意限制:
$articles = [
['title' => '欢迎关注', 'desc' => '这是第一条图文', 'pic' => 'https://example.com/1.jpg', 'url' => 'https://example.com'],
['title' => 'PHP 教程', 'desc' => '学习 PHP 开发微信应用', 'pic' => 'https://example.com/2.jpg', 'url' => 'https://example.com/php']
];
$itemTpl = "
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$itemStr = '';
foreach ($articles as $item) {
$itemStr .= sprintf($itemTpl, $item['title'], $item['desc'], $item['pic'], $item['url']);
}
$reply = "
<xml>
<ToUserName><![CDATA[{$fromUser}]></ToUserName>
<FromUserName><![CDATA[{$toUser}]></FromUserName>
<CreateTime>" . time() . "</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>" . count($articles) . "</ArticleCount>
<Articles>
{$itemStr}
</Articles>
</xml>";
echo $reply;
以上就是php如何实现微信公众号消息回复_php接入微信公众平台验证与文本图文回复逻辑的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号