## 推送事件处理及回复 ### 注意事项 * 服务端处理代码,即使不需要回复消息,也必须输出 `success` 字符串。 * 如果不需要实时回复消息,可以选择通过客服接口异步发送消息,适用于发送多条消息或业务处理较慢的场景。 * 数据格式请参考微信官方文档,一些接口需要传入数组,具体请查阅对应接口参数说明。 * 如果使用内存框架,请通过 `$GLOBALS['HTTP_RAW_POST_DATA']` 或 `php://input` 获取每次请求的原始数据内容。 ### 示例代码 ~~~php try { // 实例化接口,同时实现配置验证与消息解密 $api = \WeChat\Receive::instance($config); // 另一种方法:通过工厂方法实例化接口 // $api = \We::WeChatReceive($config); // 获取当前推送的消息类型 (text, image, location, event...) $msgType = $api->getMsgType(); // 获取当前推送消息的来源用户 OpenID $openid = $api->getOpenid(); // 获取当前推送的完整消息数据 $data = $api->getReceive(); var_export($data); // 回复文本消息 $api->text($content)->reply(); // 回复图文消息(支持普通图文或高级图文,参数为数组) $api->news($news)->reply(); // 回复图片消息(需先上传到微信服务器生成 media_id) $api->image($media_id)->reply(); // 回复语音消息(需先上传到微信服务器生成 media_id) $api->voice($media_id)->reply(); // 回复视频消息(需先上传到微信服务器生成 media_id) $api->video($media_id, $title, $desc)->reply(); // 回复音乐消息 $api->music($title, $desc, $musicUrl, $hqMusicUrl, $thumbMediaId)->reply(); // 将消息转发至多客服服务 $api->transferCustomerService($account)->reply(); } catch (\Exception $e) { // 处理异常情况 echo $e->getMessage(); } ~~~ #### 推送事件处理案例 ```php <?php // 推送事件处理及消息回复案例 include "WeChatDeveloper/include.php"; $config = [ 'appid' => 'wx60a43dd8161666d4', 'appsecret' => 'your_wechat_appsecret', 'token' => 'your_wechat_token', 'cache_path' => '/path/to/cache', ]; try { $api = \WeChat\Receive::instance($config); echo "=== 推送事件处理及消息回复 ===\n"; // 获取当前推送的消息类型 $msgType = $api->getMsgType(); echo "消息类型: " . $msgType . "\n"; // 获取当前推送消息的来源用户 OpenID $openid = $api->getOpenid(); echo "用户OpenID: " . $openid . "\n"; // 获取当前推送的完整消息数据 $data = $api->getReceive(); echo "完整消息数据: " . json_encode($data, JSON_PRETTY_PRINT) . "\n"; // 根据消息类型进行不同处理 switch ($msgType) { case 'text': // 处理文本消息 $content = $data['Content']; echo "收到文本消息: " . $content . "\n"; // 回复文本消息 $replyContent = "您发送了: " . $content; $api->text($replyContent)->reply(); echo "已回复文本消息\n"; break; case 'image': // 处理图片消息 $mediaId = $data['MediaId']; echo "收到图片消息,MediaId: " . $mediaId . "\n"; // 回复图片消息 $api->image($mediaId)->reply(); echo "已回复图片消息\n"; break; case 'event': // 处理事件消息 $event = $data['Event']; echo "收到事件消息: " . $event . "\n"; if ($event == 'subscribe') { // 关注事件 $api->text('欢迎关注!')->reply(); echo "已回复关注消息\n"; } break; default: // 其他类型消息 echo "收到其他类型消息\n"; $api->text('感谢您的消息!')->reply(); break; } echo "消息处理完成\n"; } catch (Exception $e) { echo "错误: " . $e->getMessage() . "\n"; } ``` **接口说明:** - 用于处理微信推送的各种事件和消息 - 支持文本、图片、语音、视频、事件等多种消息类型 - 可以自动回复不同类型的消息 **注意事项:** - 服务端必须输出 `success` 字符串 - 确保配置中的 `appid` 和 `token` 正确 - 复杂的业务逻辑建议记录日志 ### 说明 * 不同类型的消息需调用对应的回复方法,例如 `text()`、`image()` 等。 * 确保 `$config` 配置正确,尤其是 `appid` 和 `token`,否则接口验证可能失败。 * 复杂的业务逻辑建议通过日志记录异常,方便后续排查问题。 > 更多功能可根据实际推送消息类型和业务需求灵活处理。