日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小程序开发(7)-之获取手机号、用户信息

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序开发(7)-之获取手机号、用户信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#先說下獲取手機號的步驟,首先要調用wx.login拿到code,把code發送到我們的服務器(開發者服務器)上,后臺通過appid、appsecret(小程序后臺那里生成的)、code向微信接口服務拿到session_key、openid等信息,到這里其實我們已經可以直接去獲取手機號了,自定義登錄態,如果項目需要可以做

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

?

#獲取手機號和用戶信息的代碼如下面的permissions.js

#checkSession

主要方法是checkSession,這個呢是封裝了下wx.checkSession,首先是看走success區間呢還是fail區間,如果是success區間,先從本地拿code,如果這個code存在且未被使用過就直接返回這個code,否則重新wx.login獲取code(fail區間一樣的邏輯)

?

#getSessionKeyByCode

這個呢是調用后臺的接口,通過code換取seesion_key的,拿到數據后,重新set wx_code到本地中,并添加上use為true,代表這個code已經被使用了

?

#getPhoneNumber

這個是獲取手機號的方法,獲取手機號需使用button組件,并添加上open-type="getPhoneNumber"屬性,并綁定上bindgetphonenumber="getPhoneNumber",點擊按鈕的時候會返回加密的數據encryptedData、iv,加密需要我們傳sessionKey(如果后臺有存那不必傳),這個sessionKey我們在上一步中已經存在本地了,所以直接從本地拿wx_code里的session_key

?

#獲取用戶信息,相對獲取手機號簡單些,直接調即可,可以看getUserInfo方法

const api = require('./api.js'); const util = require('./util.js');function checkSession() {return new Promise((resolve, reject) => {wx.checkSession({success() {console.log('success:有效的');//session_key 未過期,并且在本生命周期一直有效let res = wx.getStorageSync('wx_code');// resolve(res);console.log(res);if (!res || res.use) {console.log('無效的code');wx.login({success: res => {// 發送 res.code 到后臺換取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})} else {console.log('有效的code');resolve(res);}},fail() {console.log('fail:失敗了');// session_key 已經失效,需要重新執行登錄流程// 登錄wx.login({success: res => {// 發送 res.code 到后臺換取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})}})}) }function checkSession_blank() {return new Promise((resolve, reject) => {wx.checkSession({success() {console.log('success:有效的');//session_key 未過期,并且在本生命周期一直有效let res = wx.getStorageSync('wx_code');// resolve(res);console.log(res);if (!res || res.use) {console.log('無效的code');wx.login({success: res => {// 發送 res.code 到后臺換取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})} else {console.log('有效的code');resolve(res);}},fail() {console.log('fail:失敗了');// session_key 已經失效,需要重新執行登錄流程// 登錄wx.login({success: res => {// 發送 res.code 到后臺換取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})}})}) }function getSessionKeyByCode(res) {return util.wxRequestGet({url: api.getSessionKeyByCode.url,data: {code: res.code}}).then(res => {let wxCode = wx.getStorageSync('wx_code');wx.setStorageSync('wx_code', {...res.data.data,...wxCode,use: true})}) }function getPhoneNumber(e) {console.log(e);// return checkSession().then(res => {let detail = e.detail;let wxCode = wx.getStorageSync('wx_code');// console.log('wx_code: ', res);return new Promise((resolve, reject) => {util.wxRequest({url: api.getUserDetails.url,data: {encryptedData: detail.encryptedData,iv: detail.iv,jsCode: wxCode.code,sessionKey: wxCode.session_key},method: 'POST',success: function (res) {console.log(res);// 把用戶信息和手機號信息等set在一起if (res.data.success) {let userInfo = wx.getStorageSync('wx_userinfo');wx.setStorageSync('wx_userinfo', {...userInfo,...res.data.data,openId: wxCode.openid});// wx.setStorageSync('wx_code', {// ...wxCode,// use: true// });return resolve(res);} else {wx.showToast({icon: 'none',title: res.data.msg})}reject(res);},fail: function (res) {reject(res);}})})// }) }function getUserInfo() {return new Promise((resolve, reject) => {const wxUserInfo = wx.getStorageSync('wx_userinfo') || {}if (wxUserInfo.nickName) {resolve(wxUserInfo)} else {wx.authorize({scope: 'userInfo',success() {wx.getUserInfo({success: (result) => {wx.setStorageSync({data: { ...wxUserInfo, ...result.userInfo },key: 'wx_userinfo',})resolve(result.userInfo)},// fail: (res) => reject(res),complete: () => resolve({})})}})}}) }function setUserInfo(data) {const userInfo = wx.getStorageSync('wx_userinfo');wx.setStorageSync('wx_userinfo', { ...userInfo, ...data }) }module.exports = {checkSession: checkSession,getPhoneNumber: getPhoneNumber,getUserInfo: getUserInfo,setUserInfo: setUserInfo,getSessionKeyByCode: getSessionKeyByCode }

?

總結

以上是生活随笔為你收集整理的小程序开发(7)-之获取手机号、用户信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。