免费国产欧美国日产_少妇AV一区二区三区无码_蜜桃精品av无码喷奶水小说_jk18禁网站视频_精产国品一二三级产品区别_被夫の上司に犯波多野结衣_78m成人手机免费看_最爽最刺激18禁视频_偷偷色噜狠狠狠狠的777米奇

易優(yōu)GEO 重磅上線 ~ 一站式GEO優(yōu)化工具,讓豆包、文心一言、DeepSeek 在回答中主動推薦你的品牌,搶占AI流量入口!  點擊查看

小程序模板網(wǎng)

跟著小豬來做小程序開發(fā):解密CryptedData

發(fā)布時間:2018-02-10 11:09 所屬欄目:小程序開發(fā)教程


在上一篇中,小豬介紹了微信小程序中獲取用戶的唯一標(biāo)識的兩種方式。

值得注意的是,小程序框架里沒有直接將openid和unionid以明文的方式給到前端。而是需要我們的服務(wù)器去通過微信的API來得到。

所以,要想小程序能夠基于我們本身的業(yè)務(wù)邏輯正常運行,服務(wù)器正確處理用戶數(shù)據(jù)是最基礎(chǔ)的工作,所以今天小豬再花一篇來介紹上篇文章中說到的第二種方式來獲取用戶標(biāo)識。

 

為什么使用unionid

這種方式不僅相對安全,更關(guān)鍵的是,如果我們的程序本身不止依賴小程序這一個平臺,還有本身的安卓APP,蘋果APP,或者微信公眾號,想要這些平臺之間的用戶統(tǒng)一,那么我們的小程序的用戶標(biāo)識就不能使用openid而必須使用unionid了。官方介紹是openid是對公眾號與用戶唯一對應(yīng)的。也就是說同一個用戶,在不同的公眾號、小程序之間的openid是不同的。而如果多個公眾號或者小程序都關(guān)聯(lián)到微信開發(fā)者平臺的話,那么相同的微信用戶對應(yīng)這些公眾號、小程序、APP的unionID是相同的。只有使用unionID作為用戶標(biāo)識,在使用微信登錄我們的本身程序時才可能將相同的微信用戶識別成同一用戶,達(dá)到業(yè)務(wù)邏輯跨平臺的效果。

 

開始我們的程序吧

在上一篇中,我們使用python的flask框架完成了一個接口,該接口接收小程序POST過來的code,利用該code,通過API向微信請求數(shù)據(jù),微信服務(wù)器向我們返回了類似下列格式的數(shù)據(jù):

 

  1. {
    "session_key":"oRCrTPgGwAf7jwdqV0g+Ig==",
    "expires_in":7200,
    "openid":"oWv370DkivlAs-LPrxKKvQ9KP98w"
    }

如果我們只想使用openid的話,那到這里已經(jīng)能夠正確得到數(shù)據(jù)了。這一篇我們用到上述數(shù)據(jù)的session_key的值。

 

session_key的時效性

根據(jù)微信小程序文檔的說明:

通過上述接口獲得的用戶登錄態(tài)擁有一定的時效性。用戶越久未使用小程序,用戶登錄態(tài)越有可能失效。反之如果用戶一直在使用小程序,則用戶登錄態(tài)一直保持有效。具體時效邏輯由微信維護(hù),對開發(fā)者透明。開發(fā)者只需要調(diào)用wx.checkSession接口檢測當(dāng)前用戶登錄態(tài)是否有效。登錄態(tài)過期后開發(fā)者可以再調(diào)用wx.login獲取新的用戶登錄態(tài)。

小豬做了下測試,在昨天使用的代碼上再次請求,請求到的session_key沒有變化,也就是說這個session_key的有效時間是挺長的,具體長到什么時間,官方并沒有給出一個明確的值,只是做了說明,這個值由微信服務(wù)器自己維護(hù)。不過我們?yōu)榱舜_保程序的邏輯正常,需要在使用session_key之前先檢查該session_key還是否繼續(xù)可用。

NOTE:  小豬寫這里的代碼時遇到過一個問題,就是本來想通過flask框架的session來保存session_key,但這里的問題是雖然是同一個開發(fā)工具的ajax請求,請求中卻不會自動帶上cookies,所以這里我們不能使用session來保存session_key。

 

wx.checkSession接口

簡單的示例程序

 

  1. wx.checkSession({
    success: function(){
    //session 未過期,并且在本生命周期一直有效
    },
    fail: function(){
    //登錄態(tài)過期
    wx.login() //重新登錄
    ....
    }
    })

另外可參考官方文檔對這一段的說明:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxchecksessionobject

 

wx.getUserInfo接口

官方文檔

在拿到session_key之后,我們還要繼續(xù)使用這個值。來獲取用戶加密的數(shù)據(jù)。  正如上一篇文章中代碼所示:

 

  1. 
    wx.getUserInfo({
    success: function (res) {
    that.globalData.userInfo = res.userInfo
    console.log(res)
    typeof cb == "function" && cb(that.globalData.userInfo)
    }

上述代碼的res參數(shù),里面的encryptedData和iv字段是我們需要用到的。當(dāng)然,res里面的userInfo字段里面已經(jīng)有一些基礎(chǔ)信息的數(shù)據(jù)了。  根據(jù)小程序官方文檔解析數(shù)據(jù),我們可以得到下列數(shù)據(jù):

 

  1. 
    {
    u'province': u'Beijing',
    u'openId': u'oWv370DkivlAs-LPrxKKvQ9KP98w',
    


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.szcjxy.com/wxmini/doc/course/21927.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢: 點擊咨詢
在線客服