微信小程序獲取個人信息


這個作業屬於哪個課程 <2021春軟件工程實踐|S班>
這個作業要求在哪里 <作業要求>
這個作業的目標 個人技術博客

技術概述

學習原因:在開發微信小程序的時候,我們一般都需要獲取當前用戶的微信信息,來存儲用戶的個性化設置,以及提供個性化的服務。
做什么:這里要介紹一下如何獲取用戶的登錄狀態及個人信息。
技術難點:在我個人開發過程中發現有許多參考文檔是舊的,不能很好地解決問題,於是由此介紹下個人的解決方案。

技術詳述

  1. 獲取用戶身份標識
    我們一般是采用wx.login()函數來獲取獲取登錄憑證(code)。通過憑證進而換取用戶登錄態信息,包括用戶在當前小程序的唯一標識(openid)、微信開放平台帳號下的唯一標識(unionid,若當前小程序已綁定到微信開放平台帳號)及本次登錄的會話密鑰(session_key)等,之后就可以依據openid在后端生成用戶並綁定用戶行為。返回值是一個code,code是用戶登錄憑證(有效期五分鍾)。開發者需要在開發者服務器后台調用auth.code2Session,使用code換取openid、unionid、session_key等信息
wx.login({
  success (res) {
    if (res.code) {
      //發起網絡請求
      wx.request({
        url: 'https://example.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登錄失敗!' + res.errMsg)
    }
  }
})

這是微信官方提供的時序圖,在下面問題解決部分有對於此的應用。
image

  1. 獲取用戶資料信息
    在之前可以通過wx.getUserInfo()函數配合login登錄后的狀態直接獲取用戶狀態,但在四月份微信調整接口使得getUserInfo()只能獲取到匿名用戶狀態,於是現在需要獲取用戶信息應調用wx.getUserprofile()函數。
    image
getUserProfile(e) {
    // 推薦使用wx.getUserProfile獲取用戶信息,開發者每次通過該接口獲取用戶個人信息均需用戶確認
    // 開發者妥善保管用戶快速填寫的頭像昵稱,避免重復彈窗
    wx.getUserProfile({
      desc: '用於完善會員資料', // 聲明獲取用戶個人信息后的用途,后續會展示在彈窗中,請謹慎填寫
      success: (res) => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },
  getUserInfo(e) {
    // 不推薦使用getUserInfo獲取用戶信息,預計自2021年4月13日起,getUserInfo將不再彈出彈窗,並直接返回匿名的用戶個人信息
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  },

技術使用中遇到的問題和解決過程

  1. 由於是初學,在獲取登錄狀態以及登錄信息時都會踩坑,比如登錄完卻沒有記錄狀態等問題,有些接口需要登錄后才能調用,否則后端無法獲取正在訪問的用戶的信息,自然無法返回需要的數據,以下為我的解決方法可以參考。
    做法是封裝userLogin函數,函數返回一個Promise對象,在調用別的函數時通過userInfo這個全局變量去判斷該用戶是否登錄,若尚未登錄則調用userLogin.then請求登錄,已登錄則可以直接獲取信息。
userLogin:function (e) {
    let that=this;
    let promise=new Promise(function (resolve,reject) {
      let _that = that;
      wx.login({
        success: res => {
          // 發送 res.code 到后台換取 openId, sessionKey, unionId
           console.log(res.code);
           console.log("登錄" + that.globalData.baseUrl);
           request({
             url:  that.globalData.baseUrl + '/api/user/login',
             method: 'POST',
             data:
               res.code,
             success:function(respond)
             {
               that.globalData.userInfo=respond.data;
               console.log("登錄成功");
               console.log(respond);
               that.globalData.userId = respond.data.data.id;
               resolve(respond);
             },
             fail:function(respond)
             {
              //  this.globalData.userInfo=res.data;
              console.log("登錄失敗");
              console.log(respond);
               reject(respond);
             }
           })
        }
      })
    })
    return promise;
  },
function(){
    if(!app.globalData.userInfo){  //未登錄
        userLogin
        .then(this.action());
    }
    else                           //已登錄
        this.action();
}
  1. 獲取用戶資料時一般應提供一個按鈕供用戶授權,點擊按鈕后會出現授權彈窗用戶允許后將返回一系列用戶信息,則可以在特定地方顯示,或者將其存儲進數據庫中
    image
    image
    image
    代碼如下可參考
<image class="avatar" bindtap="setAvatarUrl" src="{{url}}"> </image>
setAvatarUrl: function(e) {
    wx.getUserProfile({
      desc: '獲取用戶頭像等信息',
      success: res => {
        this.setData({
          url: res.userInfo.avatarUrl
        })
        console.log(res)
      },
      fail: err => {
        wx.showToast({
          title: '失敗了',
          icon: 'error'
        })
      }
    })
  },

總結

微信小程序確實是一種很便攜的工具,能夠實現快速開發。以上是我對於獲取用戶身份標識以及獲取用戶信息的方法的分享,在初次學習時容易遇到問題,查閱資料后也會存在疑惑,以上內容是我在踩坑后總結調整得到,希望能對讀者有所幫助,更多拓展的用法需要參考微信開發文檔。若有疑問,也可評論留言。

參考文獻、參考博客

微信官方文檔
微信小程序獲取openid


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM