
用 Eyun 的 API 做微信相关项目差不多3年了从最早只会抄 sendText 发通知到现在能搭出完整的自动化平台中间踩的坑不少。最近整理笔记的时候我把一次接口调用背后到底发生了什么梳理了一遍发现 Eyun 的能力开放其实可以拆成4层来看。把这4层想明白之后再去看 Eyun开发文档 就不是一堆零散接口了而是一套自上而下的能力体系。下面一层一层讲。第1层连接层——你发的HTTP请求是怎么被认出来的原理上很简单开发者发一个 RESTful HTTP 请求到 Eyun 接口请求头里带 Token 做鉴权请求体里带 wId 标识你要操作哪个微信实例。Eyun 收到后先验 Token 合法性再根据 wId 找到对应的微信实例把指令派下去。这层对开发者的影响是——你不用关心微信实例挂在哪台机器、网络怎么打通只要 Token 对、wId 对请求就能精准落到目标实例。我以前自建方案最头疼的就是实例和业务请求的对应关系Eyun 这层把这事彻底屏蔽了。第2层消息层——sendText 为什么能发出去消息这层封装的是微信消息发送逻辑。Eyun 的 sendText、sendImage、sendFile 这些接口本质上是把构造微信协议消息体→加密→长连接发送→等回执这一串底层动作包成一个 POST JSON 的接口。开发者只要传 wcId接收方和 content内容就能发不用碰协议细节。目前这层覆盖文本、图片、文件、语音、视频、链接、名片、动图8种消息类型对开发者来说意味着——你业务里能输出的内容形态基本都能通过同一套接口发出去。Eyun 平台的接口列表就是这层的全貌。第3层事件层——Webhook 回调是怎么把消息推给你的前两层都是你主动调 Eyun这层反过来了——微信端有事件发生Eyun 主动 POST 到你配置的回调地址。主要覆盖4类事件消息接收、好友变更、群聊变动、联系人变更。这层对开发者的影响最大因为它决定了你能不能做响应式业务。比如客服机器人、自动跟单没有这层就只能单向发不能双向收。Webhook 回调机制这块 Eyun开发文档 讲得比较细包括 messageType 字段怎么按类型分发。第4层数据层——微信里的行为数据怎么变成结构化的前三层解决通的问题这层解决看的问题。Eyun 的消息记录查询、联系人同步、群成员列表这些接口把微信里散落的行为数据谁发了什么、好友列表、群成员按 JSON 结构化返回开发者直接拿来做数据分析、CRM 沉淀、用户画像。这层对开发者的影响是——你的微信数据不再是个黑盒而是可以接进业务系统的数据源。我有个客户就是靠这层把销售微信里的客户关系全量同步进了 CRM。4层工作原理对比层级原理逻辑Eyun API对开发者的影响连接层HTTP请求Token鉴权wId路由通用请求规范实例与业务解耦消息层协议封装→接口化发送sendText等8类消息接口内容形态全覆盖事件层微信事件→Webhook回调4类事件POST回调支持响应式业务数据层行为数据→结构化返回消息记录联系人同步数据可接入业务系统4层原理的统一调用框架精简版import requests class EyunLayerClient: 4层原理统一调用框架连接消息事件数据 def __init__(self, base_url, token, wId): self.base_url base_url self.headers {Authorization: token, Content-Type: application/json} self.wId wId # 连接层标识微信实例 def send_message(self, action, wcId, **params): 消息层调用 sendText 等接口发送消息 payload {wId: self.wId, wcId: wcId, **params} resp requests.post(f{self.base_url}/{action}, jsonpayload, headersself.headers, timeout10) return resp.json() def handle_webhook(self, event): 事件层处理 Eyun Webhook 推来的事件 msg_type event.get(messageType) if msg_type text: # 消息接收 return {reply: f收到{event.get(content)}} elif msg_type friend: # 好友变更 return {sync: event.get(wcId)} return None def fetch_data(self, data_api, **params): 数据层拉取消息记录、联系人等结构化数据 payload {wId: self.wId, **params} resp requests.post(f{self.base_url}/{data_api}, jsonpayload, headersself.headers, timeout10) return resp.json().get(data) # 用法client EyunLayerClient(http://域名, token, wId_xxx) # client.send_message(sendText, filehelper, contenthello)最后把这4层想清楚调 Eyun 接口的时候心里就有底了——你发的每个请求本质是在某一层上和微信打交道。连接层管通不通消息层管发不发事件层管收不收数据层管看不看。建议想深入了解的同学直接去 Eyun平台 实跑一遍4层能力一对照就明白 Eyun 这套体系是怎么从底层一路开放到业务的。