API 文档
WeAPI 提供标准 RESTful API 接口,采用 JWT 和 API Key 双重认证方式。所有接口均返回 JSON 格式数据。
平台概述
WeAPI 是一个基于 HTTP 的 RESTful API 服务,为开发者提供稳定可靠的微信消息收发能力。通过标准化的 API 接口,你可以轻松将微信消息通道集成到自己的业务系统中。
平台核心能力包括:
- 消息收发 — 支持文本、图片、文件等多种消息类型的发送与接收
- 事件回调 — 通过 Webhook 实时推送消息与状态变更事件
- 多账号管理 — 支持同时管理多个微信账号
- 联系人与群组 — 查询联系人列表、群组信息与成员数据
API 基础地址为:https://api.40hh.cn。所有接口请求和响应均为 JSON 格式,请正确设置 Content-Type: application/json 请求头。
快速开始
从注册到完成第一次 API 调用只需 5 分钟:
- 注册账号 — 在 注册页面 填写用户名和密码完成注册
- 登录控制台 — 使用注册的用户名和密码 登录控制台
- 创建 API Key — 在控制台的 API Key 管理页面创建新的密钥
- 调用接口 — 使用 API Key 调用消息发送接口,开始收发消息
接入指南
以下三步帮助你快速完成 WeAPI 的接入:
第一步:创建 API Key
登录 WeAPI 控制台,在"API Key 管理"页面点击"创建密钥",输入名称(如"生产环境"),即可生成一个 API Key。请妥善保存。
第二步:扫码登录微信账号
在控制台的"账号管理"页面,点击"添加账号"获取登录二维码,使用微信扫描二维码完成授权登录。登录成功后,账号状态将变为"在线"。
第三步:调用消息接口
使用 API Key 调用消息发送接口,向指定联系人发送消息:
curl -X POST "https://api.40hh.cn/api/v1/messages/send-text" \
-H "Authorization: Bearer gw_live_你的APIKey" \
-H "Content-Type: application/json" \
-d '{
"toWxid": "wxid_目标联系人的wxid",
"content": "你好,这是一条来自 WeAPI 的测试消息"
}'
认证方式
WeAPI 支持两种认证方式,可根据使用场景选择:
JWT 认证(控制台用户)
通过注册/登录接口获取 JWT Token,适用于控制台用户身份认证。在请求头中携带:
Authorization: Bearer <your_jwt_token>
API Key 认证(服务端调用)
在控制台生成 API Key,适用于服务端自动化调用。在请求头中携带:
Authorization: Bearer <your_api_key>
gw_live_ 开头。
注册
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 用户名,3-32 个字符 |
| string | 否 | 邮箱地址 | |
| password | string | 是 | 密码,至少 8 位 |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/auth/register" \
-H "Content-Type: application/json" \
-d '{
"username": "myuser",
"password": "mypassword123"
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"userId": "u_abc123",
"username": "myuser",
"token": "eyJhbGciOiJIUzI1NiIs..."
}
}
登录
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 用户名或邮箱 |
| password | string | 是 | 登录密码 |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{
"username": "myuser",
"password": "mypassword123"
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"expiresAt": "2026-07-27T14:00:00Z"
}
}
个人资料
请求头
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Authorization | string | 是 | Bearer Token 或 API Key |
请求示例
curl -X GET "https://api.40hh.cn/api/v1/profile" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
响应示例
{
"code": 0,
"message": "ok",
"data": {
"userId": "u_abc123",
"username": "myuser",
"email": "user@example.com",
"plan": "basic",
"createdAt": "2026-06-01T08:00:00Z"
}
}
API Key 列表
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页数量,默认 20 |
请求示例
curl -X GET "https://api.40hh.cn/api/v1/keys" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": {
"total": 3,
"items": [
{
"keyId": "ak_abc123",
"name": "生产环境",
"prefix": "gw_live_",
"status": "active",
"createdAt": "2026-06-15T10:00:00Z"
}
]
}
}
创建 API Key
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | API Key 名称标识 |
| expiresIn | int | 否 | 过期天数,不传则永不过期 |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/keys" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"name": "测试环境",
"expiresIn": 90
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"keyId": "ak_def456",
"name": "测试环境",
"apiKey": "gw_live_7x8y9z0a1b2c3d4e",
"expiresAt": "2026-09-25T10:00:00Z"
}
}
账号列表
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| status | string | 否 | 筛选状态:online / offline / all |
请求示例
curl -X GET "https://api.40hh.cn/api/v1/accounts" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": [
{
"accountId": "wa_001",
"wxid": "wxid_abc123",
"nickname": "客服-小明",
"avatar": "https://...",
"status": "online",
"lastActiveAt": "2026-06-27T10:30:00Z"
}
]
}
获取登录二维码
路径参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 是 | 账号 ID(路径参数) |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/accounts/wa_001/login-qr" \
-H "Authorization: Bearer gw_live_3c9x..." \
-H "Content-Type: application/json" \
-d '{}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"qrUrl": "https://api.40hh.cn/qr/abc123",
"qrBase64": "data:image/png;base64,iVBORw0KGgo...",
"expiresAt": "2026-06-27T11:00:00Z",
"loginId": "li_xyz789"
}
}
发送文本消息
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| toWxid | string | 是 | 接收方微信号(联系人 wxid 或群 id) |
| content | string | 是 | 消息内容,最多 2048 字 |
| accountId | string | 否 | 指定发送账号,默认使用主账号 |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/messages/send-text" \
-H "Authorization: Bearer gw_live_3c9x..." \
-H "Content-Type: application/json" \
-d '{
"toWxid": "wxid_abc123def456",
"content": "您好,您的验证码是 2048,5 分钟内有效。"
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"msgId": "msg_xyz789",
"status": "sent",
"timestamp": 1719480000
}
}
消息历史
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| wxid | string | 否 | 按联系人筛选 |
| startTime | string | 否 | 开始时间,ISO 8601 格式 |
| endTime | string | 否 | 结束时间,ISO 8601 格式 |
| page | int | 否 | 页码,默认 1 |
| pageSize | int | 否 | 每页数量,默认 20 |
请求示例
curl -X GET "https://api.40hh.cn/api/v1/messages?page=1&pageSize=20" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": {
"total": 128,
"items": [
{
"msgId": "msg_xyz789",
"type": "text",
"content": "您好,您的验证码是 2048",
"toWxid": "wxid_abc123",
"status": "sent",
"createdAt": "2026-06-27T10:00:00Z"
}
]
}
}
联系人列表
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| accountId | string | 否 | 指定账号 ID,默认使用主账号 |
| keyword | string | 否 | 搜索关键词 |
请求示例
curl -X GET "https://api.40hh.cn/api/v1/contacts" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": [
{
"wxid": "wxid_def456",
"nickname": "张三",
"remark": "客户-张三",
"avatar": "https://..."
}
]
}
群列表
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| accountId | string | 否 | 指定账号 ID,默认使用主账号 |
请求示例
curl -X GET "https://api.40hh.cn/api/v1/groups" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": [
{
"groupWxid": "xxx_group_id",
"name": "项目讨论群",
"memberCount": 42,
"ownerWxid": "wxid_abc123"
}
]
}
Webhook 管理
请求示例
curl -X GET "https://api.40hh.cn/api/v1/webhooks" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": [
{
"webhookId": "wh_001",
"url": "https://your-server.com/webhook",
"events": ["message.receive", "message.send"],
"status": "active",
"createdAt": "2026-06-20T08:00:00Z"
}
]
}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 回调地址,HTTPS |
| events | array | 是 | 订阅事件列表 |
| secret | string | 否 | 签名密钥 |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/webhooks" \
-H "Authorization: Bearer gw_live_3c9x..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhook",
"events": ["message.receive"],
"secret": "your_webhook_secret"
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"webhookId": "wh_002",
"url": "https://your-server.com/webhook",
"events": ["message.receive"],
"status": "active",
"createdAt": "2026-06-27T12:00:00Z"
}
}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| status | string | 否 | active / paused |
请求示例
curl -X PUT "https://api.40hh.cn/api/v1/webhooks/wh_001" \
-H "Authorization: Bearer gw_live_3c9x..." \
-H "Content-Type: application/json" \
-d '{
"status": "paused"
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"webhookId": "wh_001",
"status": "paused"
}
}
请求示例
curl -X DELETE "https://api.40hh.cn/api/v1/webhooks/wh_001" \ -H "Authorization: Bearer gw_live_3c9x..."
响应示例
{
"code": 0,
"message": "ok",
"data": {
"webhookId": "wh_001",
"deleted": true
}
}
套餐列表
请求示例
curl -X GET "https://api.40hh.cn/api/v1/plans"
响应示例
{
"code": 0,
"message": "ok",
"data": [
{ "planId": "free", "name": "免费版", "price": 0, "requestsPerDay": 100, "maxAccounts": 1 },
{ "planId": "basic", "name": "基础版", "price": 9900, "requestsPerDay": 1000, "maxAccounts": 3 },
{ "planId": "pro", "name": "专业版", "price": 29900, "requestsPerDay": 5000, "maxAccounts": 10 },
{ "planId": "enterprise", "name": "企业版", "price": 99900, "requestsPerDay": 50000, "maxAccounts": 50 }
]
}
创建订阅
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| planId | string | 是 | 套餐 ID |
| period | string | 否 | monthly / yearly |
请求示例
curl -X POST "https://api.40hh.cn/api/v1/subscriptions" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"planId": "basic",
"period": "monthly"
}'
响应示例
{
"code": 0,
"message": "ok",
"data": {
"subscriptionId": "sub_abc123",
"planId": "basic",
"period": "monthly",
"status": "active",
"expiresAt": "2026-07-27T12:00:00Z"
}
}
SDK 示例
以下示例展示如何使用不同语言调用 WeAPI 接口发送消息。
Python 示例
# pip install requests import requests API_KEY = "gw_live_your_api_key" BASE_URL = "https://api.40hh.cn" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # 发送文本消息 payload = {"toWxid": "wxid_abc123", "content": "你好,这是一条来自 WeAPI 的消息"} resp = requests.post(f"{BASE_URL}/api/v1/messages/send-text", headers=headers, json=payload) print(resp.json()) # 获取联系人列表 resp = requests.get(f"{BASE_URL}/api/v1/contacts", headers=headers) print(resp.json())
Node.js 示例
// npm install axios const axios = require('axios') const API_KEY = 'gw_live_your_api_key' const BASE_URL = 'https://api.40hh.cn' const api = axios.create({ baseURL: BASE_URL, headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' } }) // 发送文本消息 async function sendMessage() { const res = await api.post('/api/v1/messages/send-text', { toWxid: 'wxid_abc123', content: '你好' }) console.log(res.data) } sendMessage()
cURL 示例
# 发送文本消息 curl -X POST "https://api.40hh.cn/api/v1/messages/send-text" \ -H "Authorization: Bearer gw_live_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "toWxid": "wxid_abc123", "content": "你好" }' # 获取联系人列表 curl -X GET "https://api.40hh.cn/api/v1/contacts" \ -H "Authorization: Bearer gw_live_your_api_key" # 注册新用户 curl -X POST "https://api.40hh.cn/api/v1/auth/register" \ -H "Content-Type: application/json" \ -d '{ "username": "newuser", "password": "mypassword123" }'
错误码说明
WeAPI 使用统一的 JSON 响应格式,业务错误通过 code 字段标识:
| 错误码 | 说明 | 处理方式 |
|---|---|---|
| 0 | 成功 | 正常处理返回数据 |
| 1001 | 参数错误 | 检查请求参数是否正确 |
| 1002 | 认证失败 | 检查 Token 或 API Key 是否有效 |
| 1003 | 权限不足 | 当前账号没有操作权限 |
| 1004 | 资源不存在 | 请求的资源 ID 无效 |
| 1005 | 请求过于频繁 | 超出速率限制,请稍后重试 |
| 2001 | 账号未登录 | 先调用登录二维码接口完成微信登录 |
| 2002 | 账号已离线 | 微信账号已离线,需重新登录 |
| 2003 | 消息发送失败 | 检查目标 wxid 是否有效 |
| 3001 | 套餐额度不足 | 升级套餐或等待额度重置 |
| 3002 | 套餐已过期 | 续费后即可恢复使用 |
| 5001 | 内部服务错误 | 联系技术支持 |
HTTP 状态码:200 成功,400 参数错误,401 未认证,403 无权限,404 不存在,429 频率超限,500 服务端错误。
套餐与价格
WeAPI 提供四个档位的套餐,满足不同规模的使用需求:
| 功能项 | 免费版 | 基础版 | 专业版 | 企业版 |
|---|---|---|---|---|
| 价格 | 免费 | ¥99/月 | ¥299/月 | ¥999/月 |
| 年付优惠 | - | ¥990/年 | ¥2,990/年 | ¥9,990/年 |
| 每日请求次数 | 100 次 | 1,000 次 | 5,000 次 | 50,000 次 |
| 可绑定账号数 | 1 个 | 3 个 | 10 个 | 50 个 |
| 消息发送 | ✓ | ✓ | ✓ | ✓ |
| 消息接收 | ✓ | ✓ | ✓ | ✓ |
| 联系人/群组查询 | ✓ | ✓ | ✓ | ✓ |
| Webhook 回调 | - | ✓ | ✓ | ✓ |
| 历史消息存储 | 7 天 | 30 天 | 90 天 | 365 天 |
| API Key 数量 | 2 个 | 5 个 | 20 个 | 100 个 |
| 技术支持 | 社区 | 工单 | 优先工单 | 专属支持 |
| 推荐场景 | 个人体验 | 小团队 | 中型项目 | 企业级 |
常见问题
WeAPI 是一个微信消息 API 平台,提供标准 RESTful 接口,帮助开发者将微信消息收发能力集成到自己的业务系统中。
免费版每日限额 100 次 API 调用,仅支持 1 个微信账号,消息历史保留 7 天,不支持 Webhook 回调。
注册并登录 WeAPI 控制台后,在"API Key 管理"页面点击"创建密钥"即可生成。
JWT Token 通过登录获取,有效期较短(24 小时)。API Key 在控制台生成,可永不过期,推荐服务端场景使用。
在控制台"账号管理"页面,点击"添加账号"获取登录二维码,使用微信扫码完成授权登录。
超出后 API 返回 429。可等待次日额度重置,或升级到更高套餐。
支持:message.receive、message.send、account.login、account.logout、account.status。回调地址需为 HTTPS。
在控制台的"订阅管理"页面取消自动续费。取消后当前套餐可使用至到期日,到期后自动降级为免费版。
WeAPI 采用 HTTPS 加密传输,API Key 和 JWT Token 双重认证,消息数据加密存储。