企业微信可以获取用户unionid吗?

本文介绍了企业微信如何通过获取unionid来实现不同应用间的数据打通,以便进行用户行为分析和精准营销。企业微信支持与同主体的公众号、小程序等绑定,获取同一用户在不同产品中的唯一标识unionid,从而识别并跟踪用户行为,提高营销效率。

当企业在使用企业微信营销时,会添加企业的相关公众号、微信小程序等应用,因此企业可以获取客户的unionid,做到数据打通。

前言

当企业使用企业微信营销时,会添加企业的相关公众号、微信小程序等应用,因此企业可以获取客户的unionid,做到数据打通。从而知道客户在企业的公众号、微信小程序中进行了哪些行为,进而可以了解用户的需求,给客户进行精准营销。那么企业是如何获取用户的unionid的呢?

一、如何理解unionid?

我们把每个接入微信的应用(公众号、APP)比作一个独立的商场,用户使用这些应用时就像在逛商场,商场用会员卡识别用户,我们根据商场的名字给每个用户生成了一张专属的会员卡(Openid),每张会员卡只能在相应的商场使用。如果两个商场同属于一个集团,这两个商场希望会员卡能互通使用,那么微信为此做了一个打通机制,对于同一个企业,在用户属性里面加了一个企业属性(Unionid),方便同一个企业在不同的产品中识别到同一个用户。通俗来讲,同一个用户对于同一个微信开放平台下的不同应用,unionid是相同的。

对于企业微信来说,也是同理。

二、企业微信如何实现账号互通

就像上面提到的,客户逛了一家企业旗下的两家商场,如果会员卡不互通使用的话,会被认为是两个客户。对于企业来说也是一样的道理,如果有一个小程序,客户既在微信中使用了,又在企业微信中使用了,就会被认为是两个客户。这种情况下,企业微信可以实现账号互通来识别是否是同一个客户吗?

答案是肯定的,企业微信可以通过unionid来实现客户在不同产品里的数据打通,也就是说,同一个微信用户在同一公司主体下的所有微信生态产品里,具有相同的unionid,相当于身份认证。

比如,如果客户使用了企业的微信小程序或是公众号等应用,又同时添加了企业微信,那么这个客户在这些应用里都是同一个unionid,不会被认为是多个客户。而企业可以通过unionid了解到客户在这些应用里的行为轨迹,据此判断客户的意向,从而进行精准营销,提升企业微信的营销效果。

三、企业微信如何获取用户的unionid?

企业管理员登录企业微信管理后台,在“客户联系-客户”页面,找到“API”,绑定公众号或是微信小程序开发者ID。

 点击绑定后,会跳转微信公众平台要求扫码进行绑定公众号。

需要注意的是,绑定时必须选择和企业微信对应账号同主体的公众号,如果主体未认证或是主体不一致则会提示无法绑定。

绑定成功后,则会出现以下页面,旁边会有一个“解除绑定”的操作。

企业如果想要把客户的信息呈现出来,就需要根据企业微信提供的接口进行二次开发,如果企业没有开发能力,建议直接使用服务商的功能,可以清楚地看到客户的行为轨迹,比如文章和朋友圈的浏览进度、浏览次数等等,从而可以判断客户的需求。

除此之外,还有会话内容存档、删除提醒、客户画像等功能,可以帮助员工精细化运营客户,提升销售转化率,提升企业微信营销效果。

总结

以上就是关于企业微信如何获取用户unionid的操作。使用企业微信办公,可以快速提升企业的运营效果。

<think> 我们正在解决的核心问题是:在小程序获取用户标识(unionid)后,如何通过企业微信API判断该用户是否添加了企业微信好友。 根据之前的讨论,关键点在于: 1. 小程序获取用户unionid(需绑定开放平台) 2. 服务器端使用企业微信的客户联系API查询该unionid是否在客户列表中 现在结合用户提供的引用信息,我们注意到: - 引用[1][2]说明小程序获取用户信息的标准流程(wx.loginwx.getUserInfo) - 引用[3]特别强调:企业微信获取客户详情中的unionid需要满足绑定条件(小程序企业微信同一开放平台主体下) 因此,具体实现步骤如下: ### 步骤1:小程序获取用户unionid ```javascript // 小程序端登录 wx.login({ success: res => { if (res.code) { // 将code发送至开发者服务器 wx.request({ url: 'https://your-domain.com/auth', method: 'POST', data: { code: res.code }, success: (response) => { // 服务器返回unionid const unionid = response.data.unionid; // 存储unionid用于后续查询 wx.setStorageSync('unionid', unionid); } }); } } }); ``` > 注意:要获取unionid小程序必须绑定到微信开放平台[^3] ### 步骤2:服务器验证unionid企业微信客户列表中 企业微信API调用链: 1. 获取access_token 2. 获取客户列表(external_userid列表) 3. 遍历客户详情匹配unionid 关键代码(Python): ```python def check_wecom_contact(unionid): # 1. 获取企业微信access_token token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" params = { "corpid": "YOUR_CORPID", "corpsecret": "客户联系功能的SECRET" # 注意必须是客户联系功能的secret } token_response = requests.get(token_url, params=params).json() access_token = token_response.get('access_token') # 2. 获取客户列表(需要配置了客户联系的成员userid) contact_list_url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list" contact_params = { "access_token": access_token, "userid": "ADMIN_USERID" # 企业内配置了客户联系的成员userid } list_response = requests.get(contact_list_url, params=contact_params).json() external_userids = list_response.get('external_userid', []) # 3. 遍历客户详情查询unionid for external_userid in external_userids: detail_url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get" detail_params = { "access_token": access_token, "external_userid": external_userid } detail_response = requests.get(detail_url, params=detail_params).json() contact_unionid = detail_response.get('external_contact', {}).get('unionid') if contact_unionid == unionid: return True return False ``` ### 企业微信API关键配置要求 | 配置项 | 说明 | |--------------------|----------------------------------------------------------------------| | **客户联系功能** | 企业微信需开启客户联系功能,并配置使用成员[^3] | | **绑定开放平台** | 企业微信小程序必须绑定同一微信开放平台账号(且主体一致)[^3] | | **API权限** | 使用的secret必须来自“客户联系”功能,否则无法调用相关API | ### 性能优化建议 1. **批量获取客户详情**:企业微信支持批量获取客户详情(最多100个/次),减少API调用次数 ```python # 批量获取客户详情示例 batch_url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user" data = { "userid": "ADMIN_USERID", "cursor": "", # 第一次请求可不填 "limit": 100 # 最大100 } batch_response = requests.post(batch_url, params={"access_token": access_token}, json=data).json() ``` 2. **建立本地映射表**:定期同步企业微信客户列表与unionid的映射关系,避免实时查询 ### 注意事项 1. **错误码84061处理**:现该错误说明使用的secret没有客户联系权限,需检查: - 企业微信管理后台是否开启客户联系功能 - 使用的secret是否来自“客户联系-API”模块(非通用secret)[^3] 2. **UnionID一致性**: - 用户必须用同一微信账号登录小程序企业微信 - 小程序企业微信绑定同一开放平台(开放平台需认证通过) ### 前端状态引导示例 当检测到用户未添加企业微信时: ```javascript // 小程序端检测回调 if (!isContact) { wx.showModal({ title: '添加企业微信', content: '您需要添加企业微信获取更多服务', success(res) { if (res.confirm) { // 跳转到企业微信添加页面 wx.navigateToMiniProgram({ appId: '企业微信AppID', path: 'pages/addcontact/addcontact' }) } } }) } ``` §§相关问题§§ 1. 企业微信获取客户详情接口返回的unionid为空的可能原因? 2. 小程序如何实现用户未添加企业微信时的自动引导? 3. 企业微信客户联系API的频率限制是多少? 4. 如何解决企业微信小程序主体不一致导致的unionid匹配失败? </think> ### 小程序判断用户是否添加企业微信好友的实现方案 通过企业微信的客户联系API可以实现该需求,核心步骤原理如下: #### 1. 实现原理 企业微信提供了完整的客户管理API,通过以下接口组合实现判断: - 获取客户列表接口:`/cgi-bin/externalcontact/list`[^3] - 获取客户详情接口:`/cgi-bin/externalcontact/get`[^3] - 匹配原理:比较小程序用户的**unionid**与企业微信客户详情中的**unionid** ```mermaid sequenceDiagram 小程序->>+服务器: 发送登录code 服务器->>+微信API: 用code换取unionid 微信API-->>-服务器: 返回unionid 服务器->>+企业微信API: 获取客户列表 企业微信API-->>-服务器: 返回客户ID列表 服务器->>+企业微信API: 查询每个客户详情 企业微信API-->>-服务器: 返回unionid 服务器-->>-小程序: 返回匹配结果 ``` #### 2. 具体实现步骤 ##### (1) 小程序获取用户标识 ```javascript // 小程序登录获取code wx.login({ success(res) { if (res.code) { // 发送code到服务器 wx.request({ url: 'https://yourserver.com/auth', method: 'POST', data: { code: res.code }, success: (response) => { const unionid = response.data.unionid // 存储unionid用于后续验证 wx.setStorageSync('unionid', unionid) // 检查企业微信好友状态 this.checkWeComContact(unionid) } }) } } }) ``` ##### (2) 服务器端验证流程(PHP示例) ```php // 步骤1:用code换取unionid $code = $_POST['code']; $appid = "YOUR_APPID"; $secret = "YOUR_SECRET"; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code"; $response = json_decode(file_get_contents($url), true); $unionid = $response['unionid']; // 获取用户unionid // 步骤2:获取企业微信客户列表 $corpid = "YOUR_CORPID"; $corpsecret = "CONTACT_SECRET"; $token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret"; $token_data = json_decode(file_get_contents($token_url), true); $access_token = $token_data['access_token']; // 步骤3:获取客户列表 $contact_url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token=$access_token&userid=ADMIN_USERID"; $contacts = json_decode(file_get_contents($contact_url), true)['external_userid']; // 步骤4:验证unionid匹配 $isContact = false; foreach ($contacts as $external_id) { $detail_url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=$access_token&external_userid=$external_id"; $detail = json_decode(file_get_contents($detail_url), true); if ($detail['external_contact']['unionid'] == $unionid) { $isContact = true; break; } } // 返回结果给小程序 echo json_encode(['isContact' => $isContact]); ``` #### 3. 关键配置要求 1. **账户绑定要求**: - 小程序企业微信必须绑定**同一微信开放平台** - 绑定主体必须**一致**(相同企业/个认证)[^3] - 绑定操作:微信开放平台后台 → 绑定企业微信 2. **企业微信权限要求**: - 启用**客户联系**功能 - 获取**客户联系secret**(非通用secret) - 配置API接收事件推送(实时更新状态) 3. **数据匹配原理**: $$ \text{匹配成功条件:} \quad \text{小程序}_{unionid} \equiv \text{企业微信客户}_{unionid} $$ #### 4. 优化建议 1. **批量查询优化**: ```php // 批量获取客户详情(最多100个/次) $batch_url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=$access_token"; $batch_data = ['userid' => 'ADMIN_USERID', 'cursor' => '', 'limit' => 100]; $batch_contacts = json_decode(file_post_contents($batch_url, json_encode($batch_data)), true); ``` 2. **缓存机制**: - 缓存access_token(有效期7200秒) - 缓存客户列表(每小时更新) 3. **实时事件监听**: ```php // 配置企业微信事件接收URL // 监听add_external_contact事件 $event = $GLOBALS['HTTP_RAW_POST_DATA']; if ($event['Event'] == 'change_external_contact' && $event['ChangeType'] == 'add_external_contact') { // 更新本地联系缓存 } ``` #### 5. 常见问题解决 1. **unionid为空问题**: - 检查开放平台绑定状态 - 确认用户使用相同微信登录小程序企业微信 2. **84061错误处理**: ```json {"errcode":84061, "errmsg":"not in allow list"} ``` - 解决方案:在企业微信后台开启「客户联系」功能并配置使用API的成员 3. **频率限制**: - 客户列表接口:600次/分钟 - 客户详情接口:600次/分钟[^3] - 建议:使用批量查询+本地缓存优化 > 完整文档参考:[企业微信客户联系API](https://developer.work.weixin.qq.com/document/path/92114)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值