商协会系统要落地,绕不开企业微信。会员在企微里、系统在后台,两边通讯录不同步,秘书处的活就翻倍。这篇讲怎么把企微通讯录和商协会系统打通,让会员信息一处维护、两边生效。
核心思路
企微提供通讯录管理 API,系统侧定时拉取并比对,增量更新。不需要实时双向,准实时(5 分钟一次)足够商会场景。
一、获取 access_token
企微的 API 需要先拿 token,corpid 和 corpsecret 在管理后台拿,注意 secret 不要硬编码在前端。
```python
import requests
def get_token(corpid, corpsecret):
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
r = requests.get(url, params={"corpid": corpid, "corpsecret": corpsecret})
return r.json()"access_token"
```
二、拉取部门下的成员
按部门 ID 拉成员,字段映射:企微 userId → 系统会员编号,name → 姓名,mobile → 手机号。
```python
def list_users(token, dept_id=1):
url = "https://qyapi.weixin.qq.com/cgi-bin/user/simplelist"
r = requests.get(url, params={"access_token": token, "department_id": dept_id})
return r.json().get("userlist", \[\])
```
三、增量比对更新
把拉到的列表和系统库比对,新增的插入、变更的更新、离职的标记停用。用会员手机号做唯一键,避免重复。
```python
def sync_members(users, dao):
for u in users:
exist = dao.get_by_mobile(u"mobile")
if not exist:
dao.insert(map_fields(u))
elif exist.name != u"name":
dao.update(exist.id, map_fields(u))
```
四、事件回调(可选)
企微支持通讯录变更回调,会员新增/离职时主动推给系统,比定时拉更及时。配好接收 URL 和 token 即可。
踩坑点
-
token 有有效期,要缓存,别每次请求都重新拿,会被限频。
-
手机号是敏感字段,传输和存储都要加密,权限分级。
-
离职成员别物理删除,标记停用,保留历史记录供换届审计。
-
批量拉取注意分页,一次上限两百条,循环翻页。
我们这边在用的未来漫城商协互联平台,通讯录同步就是这套逻辑,实施时把 secret 配置好、字段映射定清楚,半天内跑通。
打通企微之后,会员进系统不用重复录,秘书处少一道工序,数据也对得上。技术不复杂,关键是把唯一键和权限想清楚再动手。
权限分级示例
secret 和 token 放配置中心,不在代码里。接口加鉴权中间件,只有备案服务能调。
```python
def require_auth(f):
def wrap(req):
if req.header.get("x-internal-token") != INTERNAL_KEY:
raise 403
return f(req)
return wrap
```
回调解码
企微回调是加密的,用 EncodingAESKey 解密后再处理。注意验签,防伪造请求。
```python
def decrypt(msg, key):
from Crypto.Cipher import AES
cipher = AES.new(key, AES.MODE_CBC, key:16)
return cipher.decrypt(msg)
```