在微信小程序中,因为各种各样的原因我们会需要获取到用户的openid或者unionid下面就简单来讲一下在小程序中如何获取openid和unionid。
步骤一:微信登录获取登录凭证
javascript
复制代码
wx.login({ success: res => { // 微信临时登录凭证 let _code = res.code; // 进行网络访问,将 _code 提交给服务端,服务端返回 openid 和 unionid, // 服务端对 _code 的处理机制参照 步骤二 ...... }, fail: res => { toast.show({ content: '微信登录失败' }); } });
调用微信小程序的 wx.login()可以获取到微信登录的临时凭证,此凭证将用于下面获取 openid 以及 unionid
步骤二:将获取的登录凭证提交后台,获取 openid 与 unionid(在服务端获取)
如何使用登录凭证(注意:下方代码仅用于讲解凭证使用方法以及在调试中快捷获取 openid 以及unionid,不可在正式开发中使用)
javascript
复制代码
wx.request({ // 通过此 url ,获取 openid 与 unionid url: 'https://api.weixin.qq.com/sns/jscode2session', data: { // 小程序的appid 'appid': appId, // 小程序的secret 'secret': appSecret, // wx.login()返回的登录凭证 'js_code': jscode, // 固定值,不需要改变 'grant_type': 'authorization_code' }, success: res => { // 返回的 openid console.log(res.data.openid); // 返回的会话密钥 console.log(res.data.session_key); // 注意:上面两个字段值必定会返回,unionid 则只会在满足一定条件下返回,不是必定会返回的值 console.log(res.data.unionid); } });
注意!注意!注意!===>
1、上方代码,仅仅用于讲述如何通过登录凭证获取 openid 和 unionid 以及在调试中如何快速获取 openid 和unionid, 并不能在正式开发中在客户端使用,微信不支持正式的线上产品访问 'api.weixin.qq.com/sns/jscode2…' !!! 2、在正式开发中,必须将获取的登录凭证(js_code)提交给服务端,由服务端访问 'api.weixin.qq.com/sns/jscode2…' 获取 openid 和 unionid,在返回给客户端 上边大概说的是原理的情况,下边是我使用的前端代码及服务器端(PHP)代码:
前端:
javascript
复制代码
wx.login({ success: function (res) { // console.log(res) if (res.code) { //调用函数获取微信用户信息 _this.getUserInfo(function(info){ console.log(info) _this._user.wx = info.userInfo; //发送code与微信用户信息,获取学生数据 wx.request({ method: 'POST', url: “请求的URL”, data: { code: res.code, encryptedData: info.encryptedData, iv: info.iv }, success: function (res) { console.log(res); }, fail: function (res) {} }); }); } } });
PHP端代码:
php
复制代码
/** * @name: 微信小程序登录/注册 * @desc: 描述 * @author: camellia * @date: 20200822 * @param: data type description * @return: data type description */ public function stuAppLogin(Request $request) { $code = $request->input('code'); $encryptedData = $request->input('encryptedData'); $iv = $request->input('iv'); $ch = curl_init("https://api.weixin.qq.com/sns/jscode2session?appid=$this->appid&secret=$this->appsecret&js_code=$code&grant_type=authorization_code"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch); // 将微信注册返回值变成数组 $resarr = json_decode($res, true); $token = ''; // 如果返回值数组中有session_key if (isset($resarr['session_key'])) { // 如果返回值数组中没有unionid if (!isset($resarr['unionid'])) { $pc = new WXBizDataCrypt($this->appid, $resarr['session_key']); $errCode = $pc->decryptData($encryptedData, $iv, $data); if ($errCode == 0) { $dataArr = json_decode($data, true); $resarr['unionid'] = $dataArr['unionId']; } else { $datas['code'] = -2; $datas['msg'] = $this->getMsgByCode(-2); return $datas; } } //你的逻辑代码 } return $datas; }
unionid的获取条件以及其他几种获取方式
上述已经说明,openid是必定能得到的值,unionid则需要满足一定条件才会返回,下面就讲述一下unionid的获取条件以及其他的获取方式!
获取unionID的其他几种方法(主要是在客户端获取)
调用接口wx.getUserInfo,从解密数据中获取UnionID。
如果你绑定的微信开放平台下存在同主体的公众号,并且该用户已经关注了该公众号。可以直接通过wx.login获取到用户UnionID,无须用户再次授权。
如果你绑定的微信开放平台下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。
以上基本上就是小程序获取openid及unionID的方法。
重点还是在微信开放平台那个位置,那个位置不绑定应用,打死你也取不到unionID。剩下的代码部分,请参照微信官方文档。
有好的建议,请在下方输入你的评论。
欢迎访问个人博客:guanchao.site
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”