用戶
 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

掃一掃,登錄網站

小程序社區 首頁 教程 查看內容

微信H5和微信小程序獲取openid和unionid等用戶信息的機制解讀

Rolan 2020-6-12 00:21

我們在做微信開發的時候有時候需要確認用戶身份來完成登錄注冊、消息推送、用戶關聯、快捷登錄等功能,但是小程序或H5應該在何時獲取openid或unionid,如何才能設計出更加順滑的操作,讓產品經理們倍感頭疼,今天就 ...

我們在做微信開發的時候有時候需要確認用戶身份來完成登錄注冊、消息推送、用戶關聯、快捷登錄等功能,但是小程序或H5應該在何時獲取openid或unionid,如何才能設計出更加順滑的操作,讓產品經理們倍感頭疼,今天就來簡單講講H5和小程序獲取用戶信息的機制。

什么是openid、unionid和用戶基本信息?

這張圖的意思是說,同一個微信用戶在不同的應用中存在不同的唯一ID,就是openid,但是當兩個應用綁定在同一個微信開發者平臺賬號下的時候,可以判斷出兩個openid關聯的是同一個unionid,這樣,開發者就知道兩個應用中的兩個用戶其實是同一個用戶。需要注意,假如兩個應用沒有綁定在同一個開發者賬號下,那意味著無法獲取到unionid。

用戶基本信息包括:openid、unionid、昵稱、頭像、所在城市等眾多信息,我們不需要明確太多,完全可以查看接口,這里要注意的是用戶基本信息是包括unionid的,但是如果沒有申請開發者平臺賬號并進行應用的綁定,那么用戶基本信息是無法返回unionid的。

H5如何獲取用戶的openid和unionid
明確H5:
這里說的H5,是指網頁應用,也就是說用戶在微信客戶端訪問網頁應用,可以通過授權機制獲取到用戶的信息,進而實現業務邏輯。

網頁授權回調域名的說明:

(翻譯一下,就是H5網頁在微信公眾號的配置,這個不難,也不是重點,就直接復制微信開發者文檔里面的內容看看就行了)

(1) 在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權回調域名。請注意,這里填寫的是域名(是一個字符串),而不是URL,因此請勿加 http:// 等協議頭;
(2) 授權回調域名配置規范為全域名,比如需要網頁授權的域名為:www.qq.com,配置以后此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進行OAuth2.0鑒權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com 無法進行OAuth2.0鑒權;
(3) 如果公眾號登錄授權給了第三方開發者來進行管理,則不必做任何設置,由第三方代替公眾號實現網頁授權即可。
參考文檔鏈接


網頁授權的兩種形式

官方文檔
方式1-靜默授權獲取openid

以snsapi_base為scope發起的網頁授權,是用來獲取進入頁面的用戶的openid的,并且是靜默授權并自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(往往是業務頁面)

方式2-非靜默授權獲取openid

以snsapi_userinfo為scope發起的網頁授權,是用來獲取用戶的基本信息的。但這種授權需要用戶手動同意,并且由于用戶同意過,所以無須關注,就可在授權后獲取該用戶的基本信息。
(翻譯:就是說,用戶可以通過授權框確認授權,獲取用戶的基本信息,這里的基本信息是包含unionid的,但是前提是應用已經綁定了微信開放平臺的開發者賬號)

到這里兩種方式并沒有完,微信官方文檔中又增加了一條奇怪的限制:
“用戶管理類接口中的“獲取用戶基本信息接口”,是在用戶和公眾號產生消息交互或關注后事件推送后,才能根據用戶OpenID來獲取用戶基本信息。這個接口,包括其他微信接口,都是需要該用戶(即openid)關注了公眾號后,才能調用成功的?!?/div>

這是因為聰明的開發者想到了規避用戶授權就能獲取到包括unionid在內的用戶基本信息的方法,所以在后續的迭代中,微信屏蔽了這個接口。什么方法呢,就是用靜默的方式獲取到用戶的openid,然后在“用戶管理的接口中用openid去查用戶信息”,如圖:
那么微信為了規避這種情況的發生,所以給出了限制,使用用戶管理類接口中的獲取用戶基本信息的接口時,必須要先關注公眾號,否則返回的信息只有openid,也就是說,你只能用openid換回來openid,等于啥都沒有~~~

看看用戶管理類接口中的內容:

{
   "user_info_list": [
       {
           "subscribe": 1, 
           "openid": "otvxTs4dckWG7imySrJd6jSi0CWE", 
           "nickname": "iWithery", 
           "sex": 1, 
           "language": "zh_CN", 
           "city": "揭陽", 
           "province": "廣東", 
           "country": "中國", 

           "headimgurl": "http://thirdwx.qlogo.cn/mmopen/xbIQx1GRqdvyqkMMhEaGOX802l1CyqMJNgUzKP8MeAeHFicRDSnZH7FY4XB7p8XHXIf6uJA2SCunTPicGKezDC4saKISzRj3nz/0",

          "subscribe_time": 1434093047, 
           "unionid": "oR5GjjgEhCMJFyzaVZdrxZ2zRRF4", 
           "remark": "", 

           "groupid": 0,
           "tagid_list":[128,2],
           "subscribe_scene": "ADD_SCENE_QR_CODE",
           "qr_scene": 98765,
           "qr_scene_str": ""

      }, 
       {
           "subscribe": 0, 
           "openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg"
       }
   ]}

其中subscribe代表是否關注了公眾號,1為關注,0為未關注,在0的情況下,只返回了openid,1的情況下返回了很多信息。

綜上所述
網頁應用可以靜默獲取openid,可以授權獲取用戶基本信息(包括unionid)。

微信小程序如何獲取用戶的openid和unionid
小程序的登錄時序圖

整個過程中,其實是靜默獲取到用戶的openid的,這一點和早期的小程序不一樣,早期的小程序是通過用戶授權才能獲取到openid的。

小程序獲取unionid
方式1-直接調用接口(需要授權):

調用接口 wx.getUserInfo,從解密數據中獲取 UnionID。注意本接口需要用戶授權,請開發者妥善處理用戶拒絕授權后的情況。

方式2-存在同主體公眾號且已經關注了該公眾號(無需授權):

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

方式3-存在同主體的公眾號或移動應用且已經授權登錄過該公眾號或移動應用(無需授權):

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

方式4-五分鐘內在小程序中完成過支付(無需授權):

用戶在小程序(暫不支持小游戲)中支付完成后,開發者可以直接通過getPaidUnionId接口獲取該用戶的 UnionID,無需用戶授權。注意:本接口僅在用戶支付完成后的5分鐘內有效,請開發者妥善處理。

其他方式,與云函數有關:

1、小程序端調用云函數時,如果開發者帳號下存在同主體的公眾號,并且該用戶已經關注了該公眾號,可在云函數中通過 cloud.getWXContext 獲取 UnionID。
2、小程序端調用云函數時,如果開發者帳號下存在同主體的公眾號或移動應用,并且該用戶已經授權登錄過該公眾號或移動應用,也可在云函數中通過 cloud.getWXContext 獲取 UnionID。

綜上所述
小程序可以通過靜默的方式獲取到openid,但是需要獲取unionid需要使用用戶授權的方式。

總結
我們可以通過靜默的方式獲取h5和小程序的openid,通過授權的方式獲取用戶信息和unionid,其中小程序的用戶信息需要考慮加密解密的機制,這里不做陳述,那么產品經理們需要注意在什么時候去獲取用戶信息,在什么時候去使用openid,這樣才能打造出更加流暢的用戶體驗。

作者:王得宇AIPM
微信公眾號:他們已經在路上了
鮮花
鮮花
雞蛋
雞蛋
分享至 : QQ空間
收藏
原作者: 官方文檔 方式1-靜默授權獲取openid 以snsapi_base為scope發起的網頁授權,是用來獲取進入頁面的用戶的openid的,并且是靜默授權并自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(往往是業務頁面) 作者:王得宇AIPM 鏈接:https://www.jianshu.com/p/9ea1f27773b1 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 來自: 他們已經在路上了
梦幻单人赚钱方法 河北20选5开奖哪里查 吉林11选5彩经网 股票看行情软件 辽宁11选5前3 10倍杠杆配资 福彩p62昨晚开奖号 北京pk10在线预测 单码不是双码旧猜生肖 上海11选五开奖直播 山东11选五玩法规则