Files
zyt/QYWX_CUSTOMER_SYNC_FIX.md
T
2026-04-11 18:06:02 +08:00

165 lines
4.4 KiB
Markdown

# 企业微信客户同步问题修复指南
## 问题描述
同步企业微信客户时,能成功获取企业成员列表(207人),但无法获取任何客户数据,所有API调用都返回错误码 `48002: "api forbidden"`
## 根本原因
企业微信应用未开启"客户联系"API权限。错误码 `48002` 表示API接口被禁用或未授权。
## 解决方案
### 方案一:开启API权限(推荐)
1. 登录企业微信管理后台
- 访问:https://work.weixin.qq.com/
- 使用管理员账号登录
2. 进入应用管理
- 点击"应用管理"
- 找到您正在使用的应用(使用 `external_pay_secret` 的应用)
3. 开启客户联系权限
- 在应用详情页面,找到"客户联系"权限设置
- 开启以下权限:
* ✓ 客户联系 - 获取客户列表
* ✓ 客户联系 - 获取客户详情
* ✓ 客户联系 - 获取客户数据统计(可选)
4. 配置可信IP
- 在应用设置中找到"企业可信IP"
- 添加您的服务器IP地址
- 保存配置
5. 等待生效
- 权限修改后可能需要几分钟生效
- 建议等待5-10分钟后再测试
### 方案二:升级企业微信版本
如果您的企业微信版本不支持客户联系API:
1. 检查当前版本是否支持"客户联系"功能
2. 如需要,升级到支持该功能的版本
3. 部分功能可能需要付费版本
### 方案三:使用替代方案
如果无法开启API权限:
1. 使用企业微信后台手动导出客户数据
2. 通过CSV导入到系统
3. 或使用企业微信的webhook回调功能(需要配置)
## 诊断工具
### 1. 运行权限检查命令
```bash
php think qywx:check-permissions
```
这个命令会:
- 检查应用配置是否正确
- 测试获取部门成员权限
- 测试获取客户列表权限
- 显示详细的错误信息和解决建议
### 2. 查看日志
日志文件位置:`runtime/log/`
关键日志信息:
```
企业微信-获取成员客户列表响应 userId=XXX: {"errcode":48002,"errmsg":"api forbidden"...}
```
如果看到 `errcode: 48002`,说明是权限问题。
## 代码改进
已对代码进行以下改进:
1. **更好的错误处理**
- `getExternalContactList()` 方法现在会检测 `48002` 错误
- 权限错误时返回 `false` 而不是空数组
- 同步逻辑会捕获权限错误并抛出明确的异常
2. **新增诊断方法**
- `WechatWorkService::checkAppPermissions()` - 检查应用权限
- `QywxCheckPermissions` 命令 - 完整的权限诊断工具
3. **改进的日志记录**
- 权限错误会记录更详细的信息
- 包含解决方案提示
## 测试步骤
1. 确认已开启API权限
2. 运行诊断命令:
```bash
php think qywx:check-permissions
```
3. 如果诊断通过,运行同步:
```bash
php think qywx:sync-customer
```
4. 检查同步结果:
- 查看日志文件
- 检查数据库表 `la_qywx_external_contact`
- 在管理后台查看客户列表
## 常见问题
### Q1: 权限已开启,但仍然报错48002
A:
- 等待5-10分钟让权限生效
- 清除企业微信access_token缓存:删除缓存键 `qywx_access_token`
- 检查服务器IP是否在可信IP列表中
### Q2: 找不到"客户联系"权限选项
A:
- 您的企业微信版本可能不支持此功能
- 需要升级到企业版或专业版
- 联系企业微信客服确认
### Q3: 部分成员能获取客户,部分不能
A:
- 检查成员是否有"客户联系"权限
- 在企业微信后台为成员分配权限
- 确认成员确实有添加客户
### Q4: 同步速度很慢
A:
- 这是正常的,因为需要逐个成员获取客户列表
- 207个成员 × 每个成员的客户数 = 大量API调用
- 建议设置定时任务,每小时或每天同步一次
## 相关文件
- `server/app/adminapi/logic/qywx/CustomerLogic.php` - 同步逻辑
- `server/app/common/service/wechat/WechatWorkService.php` - API服务
- `server/app/command/QywxSyncCustomer.php` - 同步命令
- `server/app/command/QywxCheckPermissions.php` - 诊断命令(新增)
- `server/config/project.php` - 配置文件
## 联系支持
如果按照以上步骤仍无法解决:
1. 收集以下信息:
- 诊断命令的完整输出
- 最近的日志文件
- 企业微信应用的权限截图
2. 联系企业微信技术支持
- 官方文档:https://developer.work.weixin.qq.com/
- 开发者社区:https://developers.weixin.qq.com/community/business
---
最后更新:2024-04-11