微信公众号对接指南
概述
本模块实现了微信公众号的消息回调对接。当用户在公众号中发送消息时,微信服务器会将消息 POST 到配置的回调地址,我们处理消息并直接返回回复内容。架构设计
核心组件
WeChatMpRobotEndpoint- 处理微信公众号回调的 REST 接口RobotChatService- 统一的机器人聊天服务WeChatMpChannelConfig- 渠道配置(appId, appSecret, token, encodingAesKey)weixin-java-mp- 微信公众号 Java SDK
回调地址格式
消息处理流程
1. URL 验证(GET 请求)
微信服务器在配置服务器地址时会发送 GET 请求验证: 请求参数:| 参数 | 说明 |
|---|---|
| signature | 微信加密签名 |
| timestamp | 时间戳 |
| nonce | 随机数 |
| echostr | 随机字符串 |
- 将 token、timestamp、nonce 三个参数进行字典序排序
- 拼接后进行 SHA1 加密
- 与 signature 对比,一致则验证通过
- 原样返回 echostr
2. 接收消息(POST 请求)
明文模式请求体:3. 响应格式
明文模式响应:与企业微信的差异
| 特性 | 微信公众号 | 企业微信 |
|---|---|---|
| 验证签名参数 | signature | msg_signature |
| 验证签名算法 | SHA1(token, timestamp, nonce) | SHA1(token, timestamp, nonce, echostr) |
| 验证返回值 | 直接返回 echostr | 解密后返回 |
| 消息加密 | 可选(三种模式) | 必须加密 |
| 加密标识 | URL 参数 encrypt_type=aes | 无(始终加密) |
| 用户标识 | OpenID | UserId |
消息加密模式
微信公众号支持三种消息加密模式:| 模式 | 说明 | 请求体 | 响应体 |
|---|---|---|---|
| 明文模式 | 不加密 | 明文 XML | 明文 XML |
| 兼容模式 | 同时包含明文和密文 | 明文 + 密文 | 明文 XML |
| 安全模式 | 仅密文 | 密文 XML | 密文 XML |
encrypt_type 参数判断并处理。
配置说明
在 LangChat 管理后台创建 API 密钥时,选择”微信公众号”渠道,配置以下信息:| 配置项 | 必填 | 说明 | 获取位置 |
|---|---|---|---|
| appId | 是 | 公众号AppID | 公众号后台 → 基本配置 |
| appSecret | 是 | 公众号AppSecret | 公众号后台 → 基本配置 |
| token | 是 | 消息校验Token | 自定义,需与公众号后台一致 |
| encodingAesKey | 否* | 消息加解密密钥 | 公众号后台自动生成 |
*注:如果使用安全模式或兼容模式,encodingAesKey 必填。
微信公众号后台配置
步骤一:进入服务器配置
- 登录 微信公众平台
- 进入「设置与开发」→「基本配置」
- 找到「服务器配置」区域
步骤二:配置服务器地址
| 配置项 | 填写内容 |
|---|---|
| URL | https://你的域名/robot/wechat-mp/callback/{apiKey} |
| Token | 自定义字符串(需与 LangChat 配置一致) |
| EncodingAESKey | 点击「随机生成」或自定义 |
| 消息加解密方式 | 推荐选择「安全模式」 |
步骤三:提交验证
- 确保 LangChat 服务已部署并可访问
- 确保已在 LangChat 中创建对应的 API 密钥
- 点击「提交」按钮
- 验证成功后点击「启用」
注意事项
5秒超时限制
微信服务器要求在 5 秒内返回响应,否则会:- 进行最多 3 次重试
- 用户看到「该公众号暂时无法提供服务」提示
- 如果 AI 响应较慢,可考虑使用客服消息接口异步回复
- 优化模型响应速度
- 设置合理的超时时间
消息去重
微信可能会重复推送同一条消息(超时重试),建议:- 根据
MsgId进行去重处理 - 缓存已处理的消息 ID
公众号类型限制
| 公众号类型 | 被动回复 | 客服消息 | 模板消息 |
|---|---|---|---|
| 订阅号(个人) | ✅ | ❌ | ❌ |
| 订阅号(企业) | ✅ | ❌ | ✅ |
| 服务号 | ✅ | ✅ | ✅ |
HTTPS 要求
- 微信公众号要求回调地址必须是 HTTPS
- 证书必须是受信任的 CA 签发
- 不支持自签名证书
支持的消息类型
当前支持的消息类型:text- 文本消息
image- 图片消息voice- 语音消息video- 视频消息location- 地理位置消息link- 链接消息event- 事件推送(关注、取消关注、菜单点击等)

