<noframes id="bhrfl"><address id="bhrfl"></address>

    <address id="bhrfl"></address>

    <noframes id="bhrfl"><address id="bhrfl"><th id="bhrfl"></th></address>

    <form id="bhrfl"><th id="bhrfl"><progress id="bhrfl"></progress></th></form>

    <em id="bhrfl"><span id="bhrfl"></span></em>

    全部
    常見問題
    產品動態
    精選推薦

    微信小程序登錄code been used或者invalid code錯誤解決方案

    管理 管理 編輯 刪除

    前言

    做微信小程序或公眾號開發,有時我們為了管理用戶,需要獲取用戶的openid,unionId等信息。這時會用到微信提供的接口:code2Session。

    code2Session接口以code ( code是前端調用wx.login接口獲取的 ) 為參數之一,調用成功可返回openid和session_key。openid是小程序用戶的唯一標識;session_key可作為秘鑰,對wx.getUserInfo接口獲取的加密數據進行解密,解密之后可以獲取到用戶的unionId,unionId是同主體 ( 綁定了同一個開放平臺賬號)下微信用戶的唯一標識。

    在實際開發中,相信很多人在調接口時都遇到過這種錯誤:invalid code或code been used。歸根結底是沒搞清楚微信的登錄機制,在代碼邏輯上出了問題。前端頻繁調用wx.login接口或后端頻繁調用code2Session接口都有可能導致這些錯誤。

    什么是登錄狀態?

    當用戶進入小程序是有 登錄狀態一說的,在登錄狀態有效期內什么是不變的呢?session_key!

    登錄狀態有效期內,session_key是不會變化的,即使你重新調用wx.login接口獲取新的code,用新code傳給后臺去獲取session_key,你會發現獲取的 session_key跟上次是一樣的。

    我們可以在后臺保存session_key,在登錄狀態有效期內,就無需再次調用code2Session接口去獲取session_key了。

    那么,如何檢測登錄狀態是否有效?
    前端調用wx.checkSession接口,可查詢用戶當前登錄狀態是否有效。

    wx.checkSession({
    success() { // 登錄狀態有效回調
     },
    fail() {  // 登錄狀態失效回調
    
    }
    
    
    })

    什么情況下會報code been used(40163)?
    在登錄狀態有效期內,后臺用同一個code,多次調用code2Session接口就會報code been used(40163)錯誤。

    什么情況下會報invalid code(40029)?
    前端每次調用wx.login接口會導致code刷新,若后臺沒有及時獲取到新的code,用老的code去調接口,會報錯。
    后臺代碼邏輯問題:誤改了前端傳過來的code,會報錯。

    如何正確的處理代碼邏輯?

    前端可以頻繁的調用wx.login接口,但每次調用要及時通知后端。這樣后端也可以頻繁的調用code2Session接口,只要用的最新code就不會報錯。但既然我們知道了在登錄有效期這個說法,為什么要頻繁調接口呢?可以參考下面這種方式,也是筆者在實際項目中的鑒權機制: unionId+token雙重校驗 ↓

    1、 假設用戶第一次進小程序,調用wx.checkSession檢測必然為登錄狀態失效,我們可以用valid這個參數表示登錄狀態。調用wx.login接口獲取code,調用getUserInfo接口獲取加密數據,并把如下參數傳給后臺:{code:—,encryptedData:—,iv—,valid:false},后臺發現valid為false的時候,就通過code獲取session_key,再通過session_key解密出unionId,校驗unionId是不是合法用戶,如果合法,就用這個unionId生成一個token返回給前端,前端將token存入緩存。

    2、 校驗成功,小程序就可以進入主頁面了,后續的業務接口都把token放在請求頭里,后臺校驗token是否合法。若發現token無效,就給前端返回你們協商好的錯誤碼,前端跳轉至登錄頁面(帶參跳轉:tokenInvalid:1),登錄頁面發現帶有參數tokenInvalid時,即使wx.checkSession檢查登錄狀態有效,我們也要重新獲取code,加密數據,并把valid強制設為false,讓后端重新校驗,類似步驟1。這個邏輯就是處理token失效的情況的。(token是我們自定義的,后臺可以對其設置有效期,比如1個月。)


    請登錄后查看

    CRMEB-慕白寒窗雪 最后編輯于2023-05-17 17:05:21

    快捷回復
    回復
    回復
    回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
    排序 默認正序 回復倒序 點贊倒序

    {{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

    作者 管理員 企業

    {{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
    {{item.is_suggest == 1? '取消推薦': '推薦'}}
    沙發 板凳 地板 {{item.floor}}#
    {{item.user_info.title || '暫無簡介'}}
    附件

    {{itemf.name}}

    {{item.created_at}}  {{item.ip_address}}
    打賞
    已打賞¥{{item.reward_price}}
    {{item.like_count}}
    {{item.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復

    {{itemc.user_info.nickname}}

    {{itemc.user_name}}

    回復 {{itemc.comment_user_info.nickname}}

    附件

    {{itemf.name}}

    {{itemc.created_at}}
    打賞
    已打賞¥{{itemc.reward_price}}
    {{itemc.like_count}}
    {{itemc.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復
    查看更多
    打賞
    已打賞¥{{reward_price}}
    12559
    {{like_count}}
    {{collect_count}}
    添加回復 ({{post_count}})

    相關推薦

    快速安全登錄

    使用微信掃碼登錄
    {{item.label}} 加精
    {{item.label}} {{item.label}} 板塊推薦 常見問題 產品動態 精選推薦 首頁頭條 首頁動態 首頁推薦
    取 消 確 定
    回復
    回復
    問題:
    問題自動獲取的帖子內容,不準確時需要手動修改. [獲取答案]
    答案:
    提交
    bug 需求 取 消 確 定
    打賞金額
    當前余額:¥{{rewardUserInfo.reward_price}}
    {{item.price}}元
    請輸入 0.1-{{reward_max_price}} 范圍內的數值
    打賞成功
    ¥{{price}}
    完成 確認打賞

    微信登錄/注冊

    切換手機號登錄

    {{ bind_phone ? '綁定手機' : '手機登錄'}}

    {{codeText}}
    切換微信登錄/注冊
    暫不綁定
    亚洲欧美字幕
    CRMEB客服

    CRMEB咨詢熱線 咨詢熱線

    400-8888-794

    微信掃碼咨詢

    CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
    返回頂部 返回頂部
    CRMEB客服