700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 小程序登录授权获取用户信息

小程序登录授权获取用户信息

时间:2023-10-31 17:42:34

相关推荐

小程序登录授权获取用户信息

一 登录时序图如下:

wx.login() 获取js_code 示例代码: App({ onLaunch:function(){ wx.login({ success:function(res){ if(res.code){ //TODO }else{ console.log('获取用户登录态失败!'+res.errMsg) } } }); } })

code 换取 session_key 接口地址: https://api./sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 请求参数: 返回参数:

wx.checkSession 检测当前用户登录态是否有效 wx.checkSession({ success:function(){ //session未过期,并且在本生命周期一直有效 }, fail:function(){ //登录态过期 wx.login()//重新登录 .... } })

二 授权部分接口需要获得用户授权同意后才能调用。此类接口调用时: 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;如果用户已授权,可以直接调用接口;如果用户已拒绝授权,则短期内不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。

开发者可以使用 wx.getSetting 获取 用户当前的授权状态。 wx.getSetting({ success:(res)=>{ /* *res.authSetting={ * "scope.userInfo":true, * "scope.userLocation":true *} */ } })

用户可以在小程序设置界面(右上角 - 关于 - 右上角 - 设置)中控制对该小程序的授权状态。 开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。 wx.openSetting({ success:(res)=>{ /* *res.authSetting={ * "scope.userInfo":true, * "scope.userLocation":true *} */ } })

授权 提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。 OBJECT参数说明:

success返回参数说明:

// 先查询一下用户是否授权了"scope.record"这个scope wx.getSetting({ success(res){ if(!res.authSetting['scope.record']){ wx.authorize({ scope:'scope.record', success(){ //用户已经同意小程序使用录音功能,后续调用wx.startRecord接口不会弹窗询问 wx.startRecord() } }) } } })

三 获取用户信息

1.wx.getUserInfo(OBJECT)

获取用户信息,withCredentials 为 true 时需要先调用 wx.login 接口。 需要 用户授权 scope.userInfo OBJECT参数说明: 注:当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。 success返回参数说明: userInfo参数说明: 示例代码: wx.getUserInfo({ success: function(res) { var userInfo = res.userInfo var nickName = userInfo.nickName var avatarUrl = userInfo.avatarUrl var gender = userInfo.gender //性别 0:未知、1:男、2:女 var province = userInfo.province var city = userInfo.city var country = userInfo.country } })

encryptedData 解密后为以下 json 结构 { "openId":"OPENID", "nickName":"NICKNAME", "gender":GENDER, "city":"CITY", "province":"PROVINCE", "country":"COUNTRY", "avatarUrl":"AVATARURL", "unionId":"UNIONID", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP } }

2.getPhoneNumber(OBJECT)获取微信用户绑定的手机号,需先调用 login接口。 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发。 注意:目前该接口针对非个人开发者,且完成了认证的小程序开放。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

代码示例: <buttonopen-type="getPhoneNumber"bindgetphonenumber="getPhoneNumber"></butto> Page({ getPhoneNumber: function(e) { console.log(e.detail.errMsg) console.log(e.detail.iv) console.log(e.detail.encryptedData) } })

encryptedData 解密后为以下 json 结构 { "phoneNumber": "13580006666", "purePhoneNumber": "13580006666", "countryCode": "86", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP } }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。