最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

微信小程序授權(quán)登錄及解密unionId出錯(cuò)的方法

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:06:58
文檔

微信小程序授權(quán)登錄及解密unionId出錯(cuò)的方法

微信小程序授權(quán)登錄及解密unionId出錯(cuò)的方法:注:沒有在微信開放平臺(tái)做開發(fā)者資質(zhì)認(rèn)證的就不要浪費(fèi)時(shí)間了,沒認(rèn)證無(wú)法獲取unionId,認(rèn)證費(fèi)用300元/年,emmmm.... 微信授權(quán)登錄流程 第一步:wx.login獲取 用戶臨時(shí)登錄憑證code 第二步:wx.getUserInfo獲取加密過的數(shù)據(jù)encryptedData和解密參
推薦度:
導(dǎo)讀微信小程序授權(quán)登錄及解密unionId出錯(cuò)的方法:注:沒有在微信開放平臺(tái)做開發(fā)者資質(zhì)認(rèn)證的就不要浪費(fèi)時(shí)間了,沒認(rèn)證無(wú)法獲取unionId,認(rèn)證費(fèi)用300元/年,emmmm.... 微信授權(quán)登錄流程 第一步:wx.login獲取 用戶臨時(shí)登錄憑證code 第二步:wx.getUserInfo獲取加密過的數(shù)據(jù)encryptedData和解密參

注:沒有在微信開放平臺(tái)做開發(fā)者資質(zhì)認(rèn)證的就不要浪費(fèi)時(shí)間了,沒認(rèn)證無(wú)法獲取unionId,認(rèn)證費(fèi)用300元/年,emmmm....

微信授權(quán)登錄流程

第一步:wx.login獲取 用戶臨時(shí)登錄憑證code

第二步:wx.getUserInfo獲取加密過的數(shù)據(jù)encryptedData和解密參數(shù)iv

第三步:把步驟一、二中的code、encryptedData、iv傳到開發(fā)者自己服務(wù)端

第三步:服務(wù)端獲取到code、encryptedData、iv之后用get方法請(qǐng)求如下微信接口

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

appid:小程序appid

secret: 小程序密鑰

js_code: 第一步獲取的臨時(shí)登錄憑證code

grant_type:'authorization_code'

接口會(huì)返回 openid, session_key,注意:用戶已經(jīng)授權(quán)過的平臺(tái)還會(huì)返回unionId,如果你只是需要unionId,則到此為止

官方文檔說(shuō)法如圖:

沒有授權(quán)過則用encryptedData、session_key、iv、appid、secret進(jìn)行解密,官方多語(yǔ)言解密示例下載鏈接:
unionId解密示例

包含c++ php python node

第四步:仿照示例解密后獲得unionId,想做什么就做什么了~

以下是授權(quán)登錄前端代碼:

authLogin () {
 wx.login({
 success: loginRes => {
 let code = loginRes.code // 獲取用戶臨時(shí)code
 wx.getUserInfo({
 success: function (res) {
 let encryptedData = res.encryptedData // 獲取加密數(shù)據(jù)
 let iv = res.iv // 解密參數(shù)
 // 發(fā)送解密必要數(shù)據(jù)到服務(wù)端
 wx.request({
 url: 'http://localhost',
 methods: 'POST',
 data: {
 code: code,
 encryptedData: encryptedData,
 iv: iv
 },
 succeess: res => {
 // 服務(wù)端首先調(diào)用微信接口獲取session_key
 // 用戶已經(jīng)授權(quán)過的平臺(tái)會(huì)直接返回unionId
 // 沒有授權(quán)過則用session_key進(jìn)行解密
 // 解密成功后服務(wù)端根據(jù)邏輯返回自定義信息
 }
 })
 }
 })
 }
 })
 }

以上步驟可行,但是微信調(diào)整了用戶授權(quán)方式

新的授權(quán)需用button組件調(diào)用getUserInfo,所以在這之前無(wú)法調(diào)用wx.login,但是如果先調(diào)用獲取用戶信息再調(diào)用wx.login的話,解密過程會(huì)出錯(cuò),猜測(cè)code對(duì)應(yīng)的session_key和之前getUserInfo獲取的encryptedData不匹配

解決辦法:

在頁(yè)面的onLoad生命周期里調(diào)用wx.login,獲取的code存入data以備需要的時(shí)候使用,但是code失效時(shí)間為5分鐘,如果用戶停留頁(yè)面時(shí)間過長(zhǎng)后點(diǎn)擊授權(quán)登錄,此時(shí)的code已經(jīng)過期了,所以,獲取code的函數(shù)應(yīng)該每4分鐘左右調(diào)用一次

wxml按鈕授權(quán):

<button open-type='getUserInfo' bindgetuserinfo="authLogin">微信登錄</button>

js:

 // 獲取code
 onLoad: function (options) {
 this.getCodeTimer()
 },
 getCodeTimer () {
 wx.login({
 success: res => {
 this.data.code = res.code
 setTimeout(() => {
 this.getCodeTimer()
 }, 4 * 60 * 1000)
 }
 })
 },
 // 授權(quán)登錄
 authLogin(event) {
 if (event.detail.errMsg == 'getUserInfo:ok') {
 wx.showLoading()
 let reqData = {
 code: this.data.code,
 encryptedData: event.detail.encryptedData,
 iv: event.detail.iv
 }
 wx.request({
 url: 'http://localhost:8080',
 methods: 'POST',
 data: reqData,
 success: (res) => {
 console.log(res)
 // 請(qǐng)求完成
 }
 })
 } else {
 console.log('用戶拒絕授權(quán)')
 }
 }

授權(quán)邏輯修改后實(shí)測(cè)沒有出過錯(cuò)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

微信小程序授權(quán)登錄及解密unionId出錯(cuò)的方法

微信小程序授權(quán)登錄及解密unionId出錯(cuò)的方法:注:沒有在微信開放平臺(tái)做開發(fā)者資質(zhì)認(rèn)證的就不要浪費(fèi)時(shí)間了,沒認(rèn)證無(wú)法獲取unionId,認(rèn)證費(fèi)用300元/年,emmmm.... 微信授權(quán)登錄流程 第一步:wx.login獲取 用戶臨時(shí)登錄憑證code 第二步:wx.getUserInfo獲取加密過的數(shù)據(jù)encryptedData和解密參
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top