企业微信和小程序绑定,获取unionid

近日拿到了一个新的需求,建设公司的私域信息,然后就一头雾水的开始了企业微信api的攻坚战。

由于第一次接触企业微信,不是很熟悉,在前端那边确认了小程序已经绑定了企业微信,嗯,绑定好了,开干吧!很快就调通了接口(毫无难度的根据code获取用户信息),然后运行后尴尬的一幕出现了,接口返回的数据没有unionid。好吧,为什么没有呢,经过一番百度和论坛划水,发现了问题,我单纯的把企业微信和公众号的概念混淆了,以为小程序绑定了企业微信,就可以返回unionid。事实上到目前为止,我也没发现那个绑定有什么卵用!

于是得到了一个结论,小程序只有绑定了微信开放平台才能拿到unionid!小程序只有绑定了微信开放平台才能拿到unionid!小程序只有绑定了微信开放平台才能拿到unionid!(重要的事情说三遍)

然后匆匆找到小程序账号负责人和微信开放平台账号负责人,赶紧绑绑绑,统统帮到一起!!!

然后就如愿以偿的得到了unionid。这时,心里不由得有个疑问出来了,我小程序和微信开放平台做的绑定,拿到的unionid和企业微信拿到的是一致的吗?嗯,这个问题相当严重,还是验证一下比较好。

于是找了个同事,用自己的微信加我企业微信,来验证这个问题,由于对企业微信后台的不熟,被企微无情的毒打了一段时间,具体过程就不详述了,下面简单介绍一下通过external_userid获取unionid的过程

第一步:需要再手机客户端里面确认好友为客户,如果不确认是拿不到信息的

第二步:从企微的客户管理里面,点击后面的小api,展示后,设置微信开发者ID,然后绑定我们的小程序

第三步:调用接口获取access_token,切记这里的corpsecret是上图中,客户联系api中的secret。其他应用的secret不能使用,corpid为企微的企业id(一个企微只有一个企业id,但是一个应用就有一个secret)

第四步:调用接口获取客户列表 https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token=ACCESS_TOKEN&userid=USERID 接口返回客户的external_userid列表,我只有一个客户,所以返回的就是我同事的信息

第五步:通过external_userid获取用户详情,调用接口  https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=ACCESS_TOKEN&external_userid=EXTERNAL_USERID 然后返回结果发现unionid是一致的,至此大功告成。

ps:因为原来没走第二步,获取的信息一直没有unionid返回 (* ̄︶ ̄)

### 微信小程序中通过 OpenID 获取 UnionID微信生态内,OpenID 是用户在一个特定的小程序中的唯一标识符,而 UnionID 则是在同一微信公众平台下的多个应用(包括公众号、小程序等)之间的通用用户标识。对于已经绑定微信开放平台账号的应用来说,可以通过用户的授权来获取 UnionID。 #### 接口说明 当开发者希望从小程序端获得用户的UnionID时,并不是直接基于OpenID去查询得到UnionID,而是应该利用`auth.code2Session`接口完成此操作[^3]。该过程涉及前端向后端发送临时登录凭证 code ,由服务器携带 appid secret 向微信服务器发起请求交换 session_key 及可能存在的 unionid 。需要注意的是只有当用户将小程序绑定微信开放平台上之后才会返回 unionid 字段;如果未绑定,则不会提供 unionid 信息。 具体流程如下: 1. 用户同意授权给小程序; 2. 前端调用微信提供的 `wx.login()` 方法获取临时登录凭证(code); 3. 将code传送给自己的服务端; 4. 服务端使用appid,secret以及收到的code访问`https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code` URL 来换取 openId , session_key (还有可能是unionid); 5. 如果需要进一步处理加密数据(如头像昵称),则还需要解密 encryptedData 参数内的内容才能拿到完整的用户资料,这部分涉及到AES算法的具体实现,在某些框架中有现成工具可以直接调用,比如ThinkPHP 中的做法就是如此[^4]. ```php // PHP示例代码用于解密并获取unionid public function getUionid($sessionKey,$iv,$encryptedData){ /** * 通过$sessionKey,$iv,$encryptedData解密获取unionid */ vendor('wxunionid.wxBizDataCrypt'); $pc = new \WXBizDataCrypt($this->appId, $sessionKey); $unionId = $pc->decryptData($encryptedData, $iv, $data); return json_decode($unionId,true); } ``` 值得注意的是,上述过程中提到的服务端逻辑应当妥善保管好敏感信息(appid/secret/session_key), 并确保传输的安全性以防止泄露风险。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值