1. 程式人生 > >.NET Core 微信公眾號小程式6種獲取UnionID方法,你知道哪幾種?

.NET Core 微信公眾號小程式6種獲取UnionID方法,你知道哪幾種?

前言

獲取UnionID是開發微信公眾號/小程式中很有必要的一個環節,特別是針對一個公司擁有多個公眾號小程式而推出的機制,實現打通賬戶一體化,用UnionID來區分多平臺的唯一性。

官方的解釋:如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過 UnionID 來區分使用者的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站應用和公眾帳號(包括小程式),使用者的 UnionID 是唯一的。換句話說,同一使用者,對同一個微信開放平臺下的不同應用,unionid是相同的。

 

相關開發文章:

.NET Core 小程式開發零基礎系列(1)——開發者啟用並牽手成功

.NET Core 小程式開發零基礎系列(2)——小程式服務通知(模板訊息)

.NET Core 微信小程式支付——(統一下單)

.NET Core 微信小程式退款——(統一退款)

 

目錄

1、UnionID機制說明

2、UnionID獲取的6種途徑(程式碼實現)

3、總結

 

UnionID機制說明

如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過 UnionID 來區分使用者的唯一性,因為只要是同一個微信開放平臺帳號下的移動應用、網站應用和公眾帳號(包括小程式),使用者的 UnionID 是唯一的。換句話說,同一使用者,對同一個微信開放平臺下的不同應用,unionid是相同的。

 

UnionID獲取的6種途徑(程式碼實現)

綁定了開發者帳號的小程式,可以通過以下途徑獲取 UnionID

UnionID獲取的6種途徑

  1. 呼叫介面 wx.getUserInfo,從解密資料中獲取 UnionID。注意本介面需要使用者授權,請開發者妥善處理使用者拒絕授權後的情況。

  2. 如果開發者帳號下存在同主體的公眾號,並且該使用者已經關注了該公眾號。開發者可以直接通過 wx.login + code2Session 獲取到該使用者 UnionID,無須使用者再次授權。

  3. 如果開發者帳號下存在同主體的公眾號或移動應用,並且該使用者已經授權登入過該公眾號或移動應用。開發者也可以直接通過 wx.login + code2Session

     獲取到該使用者 UnionID ,無須使用者再次授權。

  4. 使用者在小程式(暫不支援小遊戲)中支付完成後,開發者可以直接通過getPaidUnionId介面獲取該使用者的 UnionID,無需使用者授權。注意:本介面僅在使用者支付完成後的5分鐘內有效,請開發者妥善處理。

  5. 小程式端呼叫雲函式時,如果開發者帳號下存在同主體的公眾號,並且該使用者已經關注了該公眾號,可在雲函式中通過 cloud.getWXContext 獲取 UnionID。

  6. 小程式端呼叫雲函式時,如果開發者帳號下存在同主體的公眾號或移動應用,並且該使用者已經授權登入過該公眾號或移動應用,也可在雲函式中通過 cloud.getWXContext 獲取 UnionID。

第一種UnionID獲取

呼叫介面 wx.getUserInfo,從解密資料中獲取 UnionID。注意本介面需要使用者授權,請開發者妥善處理使用者拒絕授權後的情況。

最常見的一種,很多同學應該用的這種。

流程:使用者授權——獲取金鑰——後端解密——獲取UnionID

開放平臺繫結小程式如圖:

前端授權獲取金鑰:

 

 

後端解密獲取UnionID

varsettingItem = Senparc.Weixin.Config.SenparcWeixinSetting.Items[appID];
JsCode2JsonResult jsonResult = SnsApi.JsCode2Json(settingItem.WxOpenAppId, settingItem.WxOpenAppSecret, param.Code);
if (jsonResult.errcode != ReturnCode.請求成功)
{
    return (false, jsonResult.errmsg);
}

string unionID;
var encryptedData = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.DecodeEncryptedData(jsonResult.session_key, param.EncryptedData, param.IV);
DecodedUserInfo decodedUserInfo = SerializerHelper.GetObject<DecodedUserInfo>(encryptedData);
unionID = decodedUserInfo.unionId;

 

第二種UnionID獲取

如果開發者帳號下存在同主體的公眾號,並且該使用者已經關注了該公眾號。開發者可以直接通過 wx.login + code2Session 獲取到該使用者 UnionID,無須使用者再次授權。

流程:關注了公眾號——獲取UnionID

1、關注同一主體公眾號就好了

2、獲取UnionID,如下程式碼

varsettingItem = Senparc.Weixin.Config.SenparcWeixinSetting.Items[appID];
JsCode2JsonResult jsonResult = SnsApi.JsCode2Json(settingItem.WxOpenAppId, settingItem.WxOpenAppSecret, param.Code);
if (jsonResult.errcode != ReturnCode.請求成功)
{
    return (false, jsonResult.errmsg);
}

string unionID;
if (!jsonResult.unionid.IsNullOrEmpty())
{
    unionID = jsonResult.unionid;
    Console.WriteLine($"unionID獲取(無需解密):引數EncryptedData={param.EncryptedData},IV={param.IV},unionID={unionID}");
}

 

第三種UnionID獲取

如果開發者帳號下存在同主體的公眾號或移動應用,並且該使用者已經授權登入過該公眾號或移動應用。開發者也可以直接通過 wx.login + code2Session 獲取到該使用者 UnionID ,無須使用者再次授權。

流程:與第二步流程類似,可以引數

 

第四種UnionID獲取

使用者在小程式(暫不支援小遊戲)中支付完成後,開發者可以直接通過getPaidUnionId介面獲取該使用者的 UnionID,無需使用者授權。注意:本介面僅在使用者支付完成後的5分鐘內有效,請開發者妥善處理。

流程:訂單支付成功得到相應資訊——通過介面請求getPaidUnionId得到UnionID

1、支付流程請參考:.NET Core 微信小程式支付——(統一下單)

2、通過介面請求getPaidUnionId得到UnionID

    以下兩種方式任選其一。

    a、微信支付訂單號(transaction_id)

https://api.weixin.qq.com/wxa/getpaidunionid?access_token=ACCESS_TOKEN&openid=OPENID&transaction_id=TRANSACTION_ID

    b、微信支付商戶訂單號和微信支付商戶號(out_trade_no 及 mch_id)

 https://api.weixin.qq.com/wxa/getpaidunionid?access_token=ACCESS_TOKEN&openid=OPENID&mch_id=MCH_ID&out_trade_no=OUT_TRADE_NO

通過兩個介面請求方式就可以得到UnionID

 

第五種UnionID獲取

小程式端呼叫雲函式時,如果開發者帳號下存在同主體的公眾號,並且該使用者已經關注了該公眾號,可在雲函式中通過 cloud.getWXContext 獲取 UnionID。

流程:關注了公眾號——通過雲函式獲取UnionID

官方函式說明:

 

程式碼示例:

const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
  const {
    OPENID,
    APPID,
    UNIONID,
    ENV,
  } = cloud.getWXContext()

  return {
    OPENID,
    APPID,
    UNIONID,
    ENV,
  }
}

 

第六種UnionID獲取

小程式端呼叫雲函式時,如果開發者帳號下存在同主體的公眾號或移動應用,並且該使用者已經授權登入過該公眾號或移動應用,也可在雲函式中通過 cloud.getWXContext 獲取 UnionID。

流程:與第五種類似,可以引數。

 

總結

獲取UnionID是開發微信眾號/小程式很有必要的一個環節,主要為了打通微信多平臺體系下的唯一性,6種方式中,其實最關鍵的一步是將當前開發的應用繫結在開放平臺上,希望這篇文章讓你對UnionID有些新的認識,也希望這篇實戰文章能夠真正的幫助到