企业微信外部客户踩坑20220721
1. 加客户或者进客户的群只回调external_user_id
说明
如果一个微信用户与一个企业微信组织有关系
加了企业下的员工的好友、进了企业下的员工组织的群等
那么可以根据该用户的unionid、openid(公众号、小程序的都行)
获取该用户在该企业的外部userId,也就是externalUserId
参考:https://developer.work.weixin.qq.com/document/path/95926#unionid%E8%BD%AC%E6%8D%A2%E4%B8%BA%E7%AC%AC%E4%B8%89%E6%96%B9external_userid
如果一个微信用户与一个企业微信组织没有关系
那通过上面的接口是获取不到externalUserId的
回调
微信用户加企业微信员工号好友或者入群,都会有来自微信的回调
这个时候,回调只给你一个该企业的标识和这个用户的externalUserId
总结
通过上面的情况,如果要从正面绑定关系,只能使用系统的用户id,因为此时新用户的externalUserId拿不到
回调维护关系,是不能通过externalUserId获取系统的用户id,导致找不到关系
解决方案
1. 可以通过维护一张表
表字段有这些
- 系统用户id
- source(来源,哪里用到维护哪里)
- 是否补充过
通过不同回调场景,找到不同来源的、未补充过的用户,然后在回调之前补充externalUserId
补充完后,继续正常的业务逻辑
注意⚠️
该接口调用有限制
2. pending_id
流程
- app端通过unionid, saas_id换取pending_id
- 记录用户的account_id与pending_id映射关系
- admin通过external_id换取pending_id
- 通过pending_id查询到account_id
- 继续业务处理
涉及到的接口
https://developer.work.weixin.qq.com/document/path/95926
注意⚠️
- 权限说明
调用external_user_id换取pending_id接口需要企业认证,不认证的会报错
Thu Sep 01 16:55:30 CST 2022
There was an unexpected error (type=Internal Server Error, status=500).
?????610016, ?????corp no certification, hint: [1662022530347281147796521], more info at https://open.work.weixin.qq.com/devtool/query?e=610016????????{"errcode":610016,"errmsg":"corp no certification, hint: [1662022530347281147796521], more info at https://open.work.weixin.qq.com/devtool/query?e=610016","result":[]}
- 如果是老授权的企业,微信回调的external_user_id是老的,不知道老的external_user_id是否能换取pending_id
直接拿回调的external_user_id去换pending_id
不需要拿老的external_user_id去换新的external_user_id
然后再拿新的external_user_id去换pending_id,这样反而换不到
回调老的external_user_id就用老的去换,回调新的就用新的去换
- 拿external_user_id去换pending_id,没有换到
见上面的问题
2. 20220628之前授权的企业,回调的外部userId是老的
说明
回调的是老的externalUserId,你主动补的是新的externalUserId
所以,在上面一个问题的第一个解决方案中
你补充的都是新的externalUserId,用老的是查不到的
你需要先维护老的授权的企业,然后需要把老externalUserId对新externalUserId的对应关系维护一下
最后统一使用新的externalUserId
参考代码:wx.impl.WxAccountSaasServiceImpl#exchangeAndGetExternalUserId