一条链路搞定微信小程序表情交互:用 EasyWeChat 接住并回复表情消息
【免费下载链接】easywechat 📦 一个 PHP 微信 SDK 项目地址: https://gitcode.com/gh_mirrors/ea/easywechat
本文用 EasyWeChat 这个 PHP 微信 SDK 的 MiniApp 模块讲清楚微信小程序表情交互的完整链路,读完后你可以独立搭出表情消息的接收、处理与回复逻辑。
接入前提:拿到代码并定位 MiniApp 模块
先获取 EasyWeChat 仓库源码:
git clone https://gitcode.com/gh_mirrors/ea/easywechat
表情接入涉及的代码集中在三个地方:
- src/MiniApp/:小程序模块入口,
Application是工厂类,Server、Utils、AccessToken 等都从这里取得 src/Kernel/:通用机制,Encryptor加解密、ServerResponse回复封装都在这一层tests/MiniApp/:小程序模块的测试用例,上线前值得照着跑一遍
表情消息的链路怎么走
用户发出的表情本质是一条文本类型消息,由微信服务端推送给后端,走的和正文消息完全相同的路径。整条链路分四步:
| 环节 | 位置 | 做什么 |
|---|---|---|
| 前端表情事件 | 小程序页面 | 用户发送表情,服务端以文本消息推送 |
| 后端接收 | MiniApp 的 Server | serve() 校验签名,按需解密并解析消息 |
| 数据处理 | 消息监听器 | 按 MsgType 取出表情内容 |
| 结果返回 | ServerResponse | 处理结果转成响应体回给前端 |
表情消息在哪里被编解码
明文模式下收到消息即可直接用,Content 字段就是表情本身,不需要额外动作。若后台推送设置选了「安全模式」或「兼容模式」,报文是 AES 加密的,这时配置里的 aes_key 必填:Application 构建 Server 时会根据 token 和 aes_key 自动装配 Encryptor,解密在 serve() 内部完成。表情是 UTF-8 多字节字符,只要解密成功,内容在传输中不会损坏,后端无需再做编码转换。
怎么注册表情消息的监听器
Server 复用了公众号服务端的实现,提供基于中间件的 addMessageListener。表情消息的 MsgType 是 text,按类型注册即可捕获:
$server = $app->getServer();
$server->addMessageListener('text', function ($message) {
// $message->Content 即表情内容,做存储或聚合
});
请求统一经 $server->serve() 返回,echostr 的签名验证、明文验签、加密解密都在其中完成,监听器只需专注业务。
展示层交给前端,后端只回数据
表情尺寸、动画这些展示细节由小程序前端负责,EasyWeChat 不提供 UI 组件。微信表情交互里,后端的职责是把表情变成业务数据:需要识别用户时,调用 Utils 的 codeToSession 用登录 code 换 openid,再落到存储。这一层边界清晰,前后端各管一段。
上线前自查:5 项确认清单
部署到生产前,逐项核对:
- 配置中的
app_id、secret填的是小程序 AppID、AppSecret,且非空 -
token已填写,Server 验签依赖它,缺失会直接抛配置异常 - 安全模式下
aes_key必填,否则加密推送无法正常解密 -
tests/MiniApp/下的用例全部通过,尤其是 Server 相关 - 接入微信后台推送地址后,真实发一条表情消息,确认响应为 success
收尾
小程序表情接入并无难点,签名、解密、监听三件事理清后,新增业务只是多挂一个 handler 的事。更多配置项说明见 docs/src/6.x/mini-app/config.md,服务推送机制与公众号同源。
【免费下载链接】easywechat 📦 一个 PHP 微信 SDK 项目地址: https://gitcode.com/gh_mirrors/ea/easywechat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



