微信小程序獲取UnionID的最佳實踐方法

一、前置知識

1、微信公眾平台後台配置相關參數

在微信公眾平台後台,“開發”->“開發設置”下,“開放平台帳號”的AppID即為小程序開發者工具內自動生成的“此小程序的 AppID”,“開發者ID”為“小程序原始ID”。此處需要配置小程序“服務器域名”和“業務域名”,包括登錄授權域名,如wx.login,wx.checkSession,wx.getUserInfo。(此處需自行備案域名)。

2、小程序登錄時的基本原理

小程序中的登錄流程主要分為兩步驟,先通過wx.login()獲取到臨時登錄憑證code,再將code發送到後端服務器的接口,使用AppID和AppSecret等參數換取access_token,從而獲取openid等用戶基礎信息。但是access_token只能獲取到用戶的基本信息,若想獲取用戶詳細信息或UnionID,則需要在前面的基礎上,進一步調用相關API,如wx.getUserInfo、wx.checkSession並且獲取session_key和UnionID以及通過session_key解密encryptedData。

二、實現步驟

接下來我們將介紹在小程序中獲取UnionID的具體步驟:

1、獲取用戶信息

小程序中的第一步操作,必須先調用wx.getUserInfo()獲取用戶基礎信息(頭像、昵稱等),後面獲取UnionID的具體操作都是基於此步驟之上的。這裡需要注意的是,若用戶未授權,則不能獲取到用戶信息。此處建議在用戶授權時將信息保存到本地,同時調用wx.login()獲取臨時登錄憑證code,發送到您的服務器後台調用微信開放接口獲取session_key,再通過session_key解密encryptedData和iv,最終獲取到UnionID。

//步驟1:獲取用戶信息
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;
  },
  fail:function(err){
    console.log(err)
  }
})

2、獲取code並發送到服務器

在前一步獲取用戶信息的同時,使用wx.login()獲取臨時登錄憑證code,並將code發送到服務器,進一步獲取session_key和openid信息,用於後續獲取UnionID。

//步驟2:獲取code
wx.login({
  success: function(res) {
    if (res.code) {
      //發起網絡請求
      wx.request({
        url: 'https://yourdomain.com/api/getOpenid',
        data: {
          code: res.code
        },
        success: function(innerRes) {
          console.log(innerRes.data)
        }
      })
    } else {
      console.log('登錄失敗!' + res.errMsg)
    }
  }
})

3、後端接口實現

在後端服務器中,將收到的code等參數,使用微信開放接口的API換取session_key並解密encryptedData,最終獲取到UnionID。根據服務器開發語言的不同,具體方法可能會有所不同。

//步驟3:後端服務器API實現
const https = require('https');
const qs = require('querystring');

exports.getOpenid = (event, context, callback) => {
  let code = event.code;
  let appid = 'yourAppId';
  let secret = 'yourAppSecret';
  let grant_type = 'authorization_code';

  let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=${grant_type}`;

  https.get(url, (res) => {
    res.on('data', (d) => {
        let result = JSON.parse(d);
        if (result.unionid){
          //TODO:save session_key in redis or other database
          callback(null, { "code":200,"openid":result.openid,"unionid":result.unionid });
        }else{
          callback(null, { "code":200,"openid":result.openid,"session_key":result.session_key });
        }
    });

  }).on('error', (e) => {
    console.error(e);
  });
};

三、總結

通過以上步驟,我們可以輕鬆地獲取到微信小程序用戶的UnionID。當然,具體實現方式可能有所不同,但基本流程是相同的。在開發過程中,建議通過測試工具或日誌等手段對流程各個步驟進行監控和調試,以保證獲取到UnionID的有效性和正確性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238480.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進制的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進制。 一、AES加密介紹 AE…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有着廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29

發表回復

登錄後才能評論