当微信平台触发用户聊天消息或系统事件时,服务端将以 HTTP POST 方式实时推送标准 JSON 数据至开发者配置的回调接口 🚀
| 项目 | 说明 |
|---|---|
| 📤 推送方式 | HTTP POST,Content-Type: application/json |
| ⏱️ 响应时限 | 3 秒内必须返回响应(建议直接返回 "" 或 HTTP 200) |
| 🔑 去重键 | $.Appid + $.Data.NewMsgId |
| 🔍 判定路径 | 先判定外层 TypeName → 若为 AddMsg 再判定 MsgType → 最后解析 Content.string |
{
"TypeName": "AddMsg", 消息类型
"Appid": "wx_e2PiMSX8ySDV6tQGroCDc", 设备ID
"Wxid": "wxid_msxcysdpcdf18", 所属微信的wxid
"Data": {
"MsgId": 1040357364, 消息ID
"FromUserName": { "string": "wxid_sender" }, 发送人的wxid
"ToUserName": { "string": "wxid_receiver" }, 接收人的wxid
"MsgType": 1, 消息类型 1是文本消息
"Content": { "string": "哈喽" }, 消息内容
"CreateTime": 1705041728, 发送时间
"PushContent": "通知栏内容", 消息通知内容
"NewMsgId": 7353749793478223190, 消息ID2
"MsgSeq": 640322095
}
}| 字段 | 含义 | 示例 / 说明 |
|---|---|---|
TypeName | 事件类型 | AddMsg 📨 / ModContacts 👤 / DelContacts 🗑️ / Offline 🔴 / FinderSyncMsg 🎬 / FinderBypMsg 💬 |
Appid | 设备标识 | 云 Pad 或 Mac 设备编号 |
Wxid | 微信账号标识 | 当前接收消息的微信账号 wxid |
Data.MsgType | 消息类型编码 | 详见下表 ⬇️ |
Data.Content.string | 消息内容 / XML | 文本正文或各类消息的 XML 结构数据 |
Data.NewMsgId | 消息唯一 ID 🔑 | 与 Appid 组合作为去重键 |
Data.CreateTime | 消息时间戳 ⏰ | Unix 时间戳 |
Data.FromUserName.string | 发送人标识 | 以 @chatroom 结尾表示群消息 👥 |
Data.ToUserName.string | 接收人标识 | 自己发出的群消息中,接收人以 @chatroom 结尾 |
| MsgType | 消息类型 | Content.string 说明 |
|---|---|---|
| 1 | 💬 文本消息 | 文本正文 |
| 3 | 🖼️ 图片消息 | 图片 CDN XML,可直接用于图片转发 |
| 34 | 🎙️ 语音消息 | 语音下载 XML,部分含 base64 数据 |
| 37 | 👋 好友请求 | 申请人验证信息,可用于自动同意 接口 |
| 42 | 🪪 名片消息 | 被推荐人信息,可用于主动加人 |
| 43 | 🎥 视频消息 | 视频 CDN XML,可直接用于视频转发 |
| 47 | 😀 Emoji 表情 | 表情 XML(含 MD5) |
| 48 | 📍 地理位置 | 位置 XML,可直接转发位置 |
⚠️ 当 MsgType = 49时,必须解析Content.string中 XML 的msg.appmsg.type:
| appmsg.type | 业务分类 | 备注说明 |
|---|---|---|
| 5 | 🔗 公众号 / 文章链接 | 需结合 XML title 区分群邀请链接 |
| 6 | 📄 文件就绪(可下载)✅ | 文件发送完毕,可执行下载或转发 |
| 33 / 36 | 🧩 小程序卡片 | |
| 57 | 💬 引用回复消息 | |
| 74 | ⏳ 文件发送中(提示) | 仅通知,此时不可下载 ❌ |
| 2000 | 💰 微信转账 | 仅提醒 |
| 2001 | 🧧 微信红包 | 仅提醒 |
| 51 | 🎬 视频号 | 视频号内容分享 |
⚠️ 此类消息需配合解析 Content.string文本或 XML(sysmsg.type)判断:
| 指令类型 | 判断条件 |
|---|---|
| ↩️ 消息撤回 | MsgType = 10002 且 sysmsg.type = revokemsg |
| 👋 拍一拍 | MsgType = 10002 且 sysmsg.type = pat |
| 📢 群公告 | sysmsg.type = mmchatroombarannouncememt |
| ✅ 群待办 | sysmsg.type = roomtoolstips |
| 🚪 被移出群聊 / ✏ ️ 修改群名 / 👑 更换群主 | MsgType = 10000,Content 包含对应关键字 |
| 👢 踢人 / 💥 解散群聊 | MsgType = 10002 且 sysmsg.type = sysmsgtemplate |
| 变动事件 | TypeName | Data 数据说明 |
|---|---|---|
| 🆕 资料变更 / 加粉成功 | ModContacts | 返回包含昵称、性别、地区的完整 Profile 对象 |
| 🗑️ 删好友 / 🚪 退出群聊 | DelContacts | 包含 UserName 对象(wxid 或 @chatroom) |
| 🔴 节点掉线告警 | Offline | 节点离线,需立即告警并重新扫码登录 🚨 |
| 事件 | TypeName | 处理建议 |
|---|---|---|
| ❤️ 互动(点赞 / 评论 / 关注) | FinderSyncMsg | 收到通知后,调用获取消息列表接口查详情 🔍 |
| 💬 收到私信 | FinderBypMsg | 同上 🔍 |
"验证回调地址是否可用" 测试数据Key = $.Appid + $.Data.NewMsgId 进行消息去重。💡 注:通过 API 接口主动发送的消息不会触发回调,但手机端主动发送的消息会有回调,属于多端消息同步的 IM 机制。
$.Data.FromUserName.string 与 $.Wxid,若一致则为本账号发出的消息。FromUserName.string 以 @chatroom 结尾ToUserName.string 以 @chatroom 结尾Content.string 格式通常为 wxid_xxxx:\n消息内容。通过切割 :\n 前的第一段内容,即可提取真实发言人的 wxid。msg.appmsg.type 进行二次判定Appid + NewMsgId 作为唯一键