欢迎访问宙启技术站
智能推送

如何实现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 开发微信接收并回复消息的基本流程。实现微信自动回复需要对接收消息和回复消息进行正确的处理,并根据用户的不同输入进行自动回复。在开发过程中,需要不断测试和调试,以保证最终的功能能够正常使用。