## 推送事件处理及回复
### 注意事项
* 服务端处理代码,即使不需要回复消息,也必须输出 `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`,否则接口验证可能失败。
* 复杂的业务逻辑建议通过日志记录异常,方便后续排查问题。
> 更多功能可根据实际推送消息类型和业务需求灵活处理。
- 项目介绍
- 功能模块总览
- 开发指南
- 常见问题解答
- 性能优化指南
- 安全防护指南
- 开发指南
- 环境准备及安装使用
- 接口实例及配置参数
- 目录结构及文件描述
- 推送事件及消息回复
- 生成带参数的二维码
- 媒体素材图文管理
- 微信服务号开发
- 客服消息管理
- 模板消息管理
- 基础菜单管理
- 个性化菜单管理
- 网页授权管理
- 网页JSSDK开发
- 标签管理
- 用户标签操作
- 模板管理
- 模板消息发送
- 临时素材管理
- 永久素材管理
- 卡券管理
- 卡券核销
- 卡券营销
- 蓝牙摇一摇周边
- 扫一扫管理
- 微信小程序开发
- 开发指南
- 数据解密
- 二维码生成
- 模板消息
- OCR服务
- 内容安全检测
- 物流订单管理
- 物流查询服务
- 直播间管理
- 直播商品管理
- 生物认证
- 图像处理
- 导购助手
- 运费险
- 服务市场
- 地址位置
- 插件管理
- 数据统计
- 企业微信开发
- 开发指南
- 通讯录管理
- 消息推送
- 部门基础管理
- 部门成员管理
- 用户基础管理
- 用户批量管理
- 应用管理
- 身份验证
- 完整API接口
- 微信支付开发
- 公众号支付
- V2统一下单
- V3统一下单
- 客户端发起支付
- 查询订单
- 关闭订单
- 申请退款
- 查询退款
- 支付通知
- 红包管理
- V3订单管理
- V3高级功能
- 支付宝支付开发
- 开发指南
- App支付
- 网站支付
- 手机支付
- 扫码支付
- 刷卡支付
- 转账
- 账单下载