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

前言html

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

官方的解釋:若是開發者擁有多個移動應用、網站應用、和公衆賬號(包括小程序),可經過 UnionID 來區分用戶的惟一性,由於只要是同一個微信開放平臺賬號下的移動應用、網站應用和公衆賬號(包括小程序),用戶的 UnionID 是惟一的。換句話說,同一用戶,對同一個微信開放平臺下的不一樣應用,unionid是相同的。json

 

相關開發文章:小程序

.NET Core 小程序開發零基礎系列(1)——開發者啓用並牽手成功後端

.NET Core 小程序開發零基礎系列(2)——小程序服務通知(模板消息)微信小程序

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

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

 

目錄session

一、UnionID機制說明app

二、UnionID獲取的6種途徑(代碼實現)

三、總結

 

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

一、關注同一主體公衆號就行了

二、獲取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

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

二、經過接口請求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有些新的認識,也但願這篇實戰文章可以真正的幫助到你。

原文出處:https://www.cnblogs.com/hailang8/p/11697311.html

相關文章
相關標籤/搜索