日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

關(guān)于小程序登錄時(shí)獲取openId和unionId走過的坑

 昵稱21532077 2018-04-10

目前的項(xiàng)目是在做小程序這方面的,接觸過的人應(yīng)該都知道,同一個(gè)微信開放平臺(tái)下的相同主體的App、公眾號(hào)、小程序的unionid是相同的,這樣就可以鎖定是不是同一個(gè)用戶。微信針對(duì)不同的用戶在不同的應(yīng)用下都有唯一的一個(gè)openId, 但是要想確定用戶是不是同一個(gè)用戶,就需要靠unionid來區(qū)分。一般自己的后臺(tái)都會(huì)有自己的一個(gè)用戶表,每個(gè)用戶有不同的userid。也就是說同一個(gè)用戶在同一個(gè)微信開放平臺(tái)下的相同主體的應(yīng)用對(duì)應(yīng)著相同的userid,unionid以及不同的openid。所以在用戶登錄進(jìn)來的時(shí)候,我們只能靠微信返回給我們的unionid去判斷是不是同一個(gè)用戶,在去關(guān)聯(lián)我們的用戶表,拿到對(duì)應(yīng)的userid。

接下來就是在獲取unionid時(shí)的一些小問題分享一下:

首先,前端調(diào)用wx.login的時(shí)候會(huì)返回一個(gè)code,這個(gè)code傳到后臺(tái)的時(shí)候,就需要去調(diào)用微信的接口(https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code)傳入 code,appid,secret去換取到openid,session_key以及unionid等信息。這里就需要注意了。官方文檔上說的是

如果用戶已經(jīng)關(guān)注公眾號(hào),或者曾經(jīng)登錄過App或公眾號(hào),則用戶打開小程序時(shí),開發(fā)者可以直接通過wx.login獲取到該用戶UnionID,無須用戶再次授權(quán)。

就是因?yàn)闆]有注意到這句話,所以后來改了好多東西,這里分為兩種情況,

(1)用code換取的時(shí)候,返回了unionid,這樣就皆大歡喜了,你可以根據(jù)unionid以及openid去判斷該用戶有沒有用戶信息,從而獲取userid或者生產(chǎn)userid返回給前端

(2)悲劇的情況,unionid返回為null,這時(shí)候你沒法兒關(guān)聯(lián)出用戶的userid。后來再去看官方文檔的時(shí)候,發(fā)現(xiàn)有針對(duì)這種情況的方法。就是需要前端再去調(diào)wx.getUserInfo()這個(gè)接口。這時(shí)候微信會(huì)返回很多數(shù)據(jù)(詳情見微信官方文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html),這些數(shù)據(jù)里面有一個(gè)encryptedData,這個(gè)數(shù)據(jù)中就包含你需要的unionid以及其他的很多用戶信息啦。獲取到以后將encryptedData、加密算法的初始向量iv返回給后端,后端根據(jù)這兩個(gè)數(shù)據(jù)以及之前的session_key就可以解密出你需要的數(shù)據(jù)了。

https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html#wxloginobject

App({
  onLaunch: function() {
    wx.login({
      success: function(res) {
        if (res.code) {
          //發(fā)起網(wǎng)絡(luò)請(qǐng)求
          wx.request({
            url: 'https:///onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登錄失??!' + res.errMsg)
        }
      }
    });
  }
})


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多