微信 API
微信 API 提供公众号授权、文章同步等功能。
公众号授权
获取授权 URL
接口地址
GET /api/wechat/authorize-url查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| redirect_uri | string | 是 | 授权后跳转的 URL |
响应示例
json
{
"code": 200,
"msg": "获取成功",
"data": {
"authorize_url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid=...",
"state": "abc123"
}
}使用流程
- 获取授权 URL
- 引导用户扫码授权
- 用户授权后跳转到 redirect_uri
- 获取授权码
- 调用回调接口
授权回调
接口地址
POST /api/wechat/callback请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | string | 是 | 授权码 |
| state | string | 是 | 状态值 |
响应示例
json
{
"code": 200,
"msg": "授权成功",
"data": {
"authorizer_appid": "wx1234567890abcdef",
"nick_name": "公众号名称",
"head_img": "https://...",
"authorized_at": "2026-02-09T10:30:00Z"
}
}获取公众号列表
接口地址
GET /api/wechat/accounts响应示例
json
{
"code": 200,
"msg": "获取成功",
"data": {
"total": 2,
"accounts": [
{
"authorizer_appid": "wx1234567890abcdef",
"nick_name": "公众号 A",
"head_img": "https://...",
"authorized_at": "2026-02-09T10:30:00Z",
"status": "active"
},
{
"authorizer_appid": "wx0987654321fedcba",
"nick_name": "公众号 B",
"head_img": "https://...",
"authorized_at": "2026-02-08T15:20:00Z",
"status": "expired"
}
]
}
}同步文章到微信
接口地址
POST /api/wechat/sync-article请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| article_id | string | 是 | 文章 ID |
| authorizer_appid | string | 是 | 目标公众号 AppID |
| options | object | 否 | 同步选项 |
options 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| upload_images | boolean | true | 是否自动上传图片 |
| compress_images | boolean | true | 是否压缩图片 |
| keep_format | boolean | true | 是否保留格式 |
| sync_cover | boolean | true | 是否同步封面图 |
请求示例
json
{
"article_id": "abc123",
"authorizer_appid": "wx1234567890abcdef",
"options": {
"upload_images": true,
"compress_images": true,
"keep_format": true,
"sync_cover": true
}
}响应示例
json
{
"code": 200,
"msg": "同步成功",
"data": {
"sync_id": "sync_123",
"article_id": "abc123",
"authorizer_appid": "wx1234567890abcdef",
"status": "success",
"media_id": "wx_media_id_123",
"synced_at": "2026-02-09T10:35:00Z"
}
}查询同步状态
接口地址
GET /api/wechat/sync-status/:sync_id响应示例
json
{
"code": 200,
"msg": "获取成功",
"data": {
"sync_id": "sync_123",
"status": "completed",
"progress": 100,
"media_id": "wx_media_id_123",
"error": null,
"created_at": "2026-02-09T10:30:00Z",
"completed_at": "2026-02-09T10:35:00Z"
}
}状态说明
| 状态 | 说明 |
|---|---|
| pending | 等待执行 |
| processing | 正在同步 |
| uploading | 上传图片中 |
| completed | 同步完成 |
| failed | 同步失败 |
取消授权
接口地址
DELETE /api/wechat/accounts/:authorizer_appid响应示例
json
{
"code": 200,
"msg": "取消成功",
"data": null
}错误码
| 错误码 | 说明 |
|---|---|
| 3001 | 授权码无效 |
| 3002 | 授权已过期 |
| 3003 | 公众号未授权 |
| 3004 | 文章不存在 |
| 3005 | 同步失败 |
| 3006 | 图片上传失败 |
| 3007 | API 调用频率超限 |
最佳实践
授权流程
- 获取授权 URL: 调用授权接口
- 引导用户授权: 显示二维码或链接
- 处理回调: 接收授权码
- 保存授权: 保存授权信息
同步优化
提高同步成功率:
- 检查授权: 确保公众号授权有效
- 压缩图片: 减少上传时间
- 分批上传: 大量图片分批上传
- 错误重试: 失败后自动重试
状态轮询
使用轮询查询同步状态:
javascript
async function checkSyncStatus(syncId) {
const maxAttempts = 60 // 最多轮询 60 次(5 分钟)
const interval = 5000 // 每 5 秒查询一次
for (let i = 0; i < maxAttempts; i++) {
const result = await getSyncStatus(syncId)
if (result.data.status === 'completed') {
return result
}
if (result.data.status === 'failed') {
throw new Error(result.data.error)
}
await sleep(interval)
}
throw new Error('同步超时')
}