如何实现php开发微信接收消息自动判断及回复相应消息
发布时间:2023-05-17 16:18:03
一、准备工作
1、微信公众号
首先,我们需要一个已经认证过的公众号,因为只有认证过的公众号才能够接收用户发送的消息。
2、服务器
接收和回复微信消息需要一个服务器,并且要能够访问到互联网。如果只是本地调试,可以使用 ngork,但是上线后需要一个服务器。
3、开发语言
我们可以使用多种语言开发微信公众号,建议使用 PHP。
4、微信开发者工具
使用微信开发者工具可以方便我们进行测试和调试。
二、接收微信消息
1、验证服务器地址
在公众号后台设置开发者模式,并验证服务器地址。在验证时,微信服务器会向你的服务器发送一个 GET 请求,如果你的服务器能够正确响应,则验证通过。
验证服务器地址的代码如下:
$signature = $_GET["signature"];
$echostr = $_GET["echostr"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = "your_token";
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
echo $echostr;
exit;
}
2、接收事件推送
微信公众号支持多种事件推送,比如关注/取消关注、菜单点击、上报地理位置等,我们需要在服务器上正确解析和处理这些事件。
// 接收事件推送
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)) {
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUserName = $postObj->FromUserName;
$toUserName = $postObj->ToUserName;
$msgType = $postObj->MsgType;
// 判断事件类型
switch ($msgType) {
case "event":
// 判断事件类型
$event = $postObj->Event;
// 关注事件
if ($event == "subscribe") {
$content = "欢迎关注我的公众号,回复“帮助”获取更多帮助信息。";
}
// 取消关注事件
if ($event == "unsubscribe") {
// 可以记录用户信息
}
// 菜单点击事件
if ($event == "CLICK") {
$key = $postObj->EventKey;
if ($key == "menu1") {
$content = "菜单1被点击";
}
if ($key == "menu2") {
$content = "菜单2被点击";
}
}
break;
case "text":
// 接收文本消息
$content = $postObj->Content;
// 进行自动回复
if ($content == "帮助") {
$content = "这是帮助信息";
}
break;
default:
$content = "未知消息类型:" . $msgType;
break;
}
// 回复消息
if ($content) {
$resultStr = sprintf($textTpl, $fromUserName, $toUserName, time(), $content);
echo $resultStr;
}
}
三、回复微信消息
如果用户发送的是文本消息,则我们可以根据用户发送的内容进行自动回复,并根据用户的不同输入,返回不同的信息。下面是一个简单的回复文本消息的例子:
// 回复文本消息
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
// 判断文本消息
if ($msgType == "text") {
// 判断内容
switch ($content) {
case "帮助":
$reply = "这是帮助信息";
break;
case "你好":
$reply = "你好呀,来自微信的朋友";
break;
default:
$reply = "收到你的消息了";
break;
}
// 回复消息
$result = sprintf($textTpl, $fromUsername, $toUsername, time(), $reply);
echo $result;
}
四、总结
以上就是使用 PHP 开发微信接收并回复消息的基本流程。实现微信自动回复需要对接收消息和回复消息进行正确的处理,并根据用户的不同输入进行自动回复。在开发过程中,需要不断测试和调试,以保证最终的功能能够正常使用。
