🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
![](https://img.kancloud.cn/14/6c/146cf0bb23eed34980fcf510febc2812_710x720.png) 1. 调用[wx.login()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html)获取**临时登录凭证code**,并回传到开发者服务器。 2. 调用[auth.code2Session](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html)接口,换取**用户唯一标识 OpenID**和**会话密钥 session\_key**。 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。 **注意:** 1. 会话密钥`session_key`是对用户数据进行[加密签名](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html)的密钥。为了应用自身的数据安全,开发者服务器**不应该把会话密钥下发到小程序,也不应该对外提供这个密钥**。 2. 临时登录凭证 code 只能使用一次 # auth.code2Session > 本接口应在服务器端调用,详细说明参见[服务端API](https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/backend-api.html)。 登录凭证校验。通过[wx.login](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html)接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。更多使用方法详见[小程序登录](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html)。 ### [](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html#%E8%AF%B7%E6%B1%82%E5%9C%B0%E5%9D%80)请求地址 ~~~ GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code ~~~ ### [](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0)请求参数 | 属性 | 类型 | 默认值 | 必填 | 说明 | | --- | --- | --- | --- | --- | | appid | string | | 是 | 小程序 appId | | secret | string | | 是 | 小程序 appSecret | | js\_code | string | | 是 | 登录时获取的 code | | grant\_type | string | | 是 | 授权类型,此处只需填写 authorization\_code | ### [](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html#%E8%BF%94%E5%9B%9E%E5%80%BC)返回值 ### [](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html#Object)Object 返回的 JSON 数据包 | 属性 | 类型 | 说明 | | --- | --- | --- | | openid | string | 用户唯一标识 | | session\_key | string | 会话密钥 | | unionid | string | 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回,详见[UnionID 机制说明](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html)。 | | errcode | number | 错误码 | | errmsg | string | 错误信息 | **errcode 的合法值** | 值 | 说明 | 最低版本 | | --- | --- | --- | | \-1 | 系统繁忙,此时请开发者稍候再试 | | | 0 | 请求成功 | | | 40029 | code 无效 | | | 45011 | 频率限制,每个用户每分钟100次 | 小程序获取手机号 前端代码 ``` <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button> getPhoneNumber: function (n) { wx.showLoading({ title: "加载中" }), wx.login({ success: function (i) { o.post("wxapp/login", { code: i.code }, function (i) { console.log([2, i]), i.error ? o.alert("获取用户登录态失败:" + i.message) : o.get( "api/getMobile", { data: n.detail.encryptedData, iv: n.detail.iv, sessionKey: i.session_key }, function (s) { console.log(s) }); }); }, fail: function () { o.alert("获取用户信息失败!"); }, complete: function () { wx.hideLoading(); } }); }, ``` 获取实例 ``` "data": { "phoneNumber": "18123119755", "purePhoneNumber": "18123119755", "countryCode": "86", "watermark": { "timestamp": 1597762273, "appid": "wx05ddsdsd62a06ab03" } } ``` php 代码 ``` ~~~ /** * 微信小程序登录 */ public function getMobile() { global $_GPC; global $_W; $encryptedData = trim($_GPC['data']); $iv = trim($_GPC['iv']); $sessionKey = trim($_GPC['sessionKey']); if (empty($encryptedData) || empty($iv)) { return app_error(AppError::$ParamsError); } $aesKey = base64_decode($sessionKey); $aesIV = base64_decode($iv); $aesCipher = base64_decode($encryptedData); $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV); $result = json_decode($result,true); if($result){ return app_json(['data'=>$result['phoneNumber']]); } return app_error(AppError::$RequestError); } ~~~ ```