java - 微信開發(fā)網(wǎng)頁授權(quán)
問題描述
在授權(quán)成功的頁面刷新一次就會出報錯{'errmsg':'code been used, hints: [ req_id: Rwakxa0262th10 ]','errcode':40163}
問題解答
回答1:這個問題我解決。大概是這么一會兒事兒。微信授權(quán)的時候,微信官方讓你用一個引導(dǎo)地址(A.action)去重定向到另外一個地址(B.action),在第二個地址(B.action)中可以獲取code,用code換取access_token,refresh_token等。多半情況是第一次能拿到用戶信息,但是第二次刷新的時候,提示errcode':40163,'errmsg':'code been used。說明code被使用過一次了,官方文檔說的很清楚,code只能用一次。當(dāng)然不管你有沒有刷新,只要你是用的code是同一個,而且不是第一次使用就會報上面的錯誤。我是這么解決的,在B.action中先去判斷session中是否存在code換取到的access_token和refresh_token等(最好是封裝成實體對象,比較好判斷),如果不存在說明code首次被使用(之前頁面被關(guān)閉了),如果存在則去session中直接獲取access_token或者是refresh_token。用獲得的access_token和refresh_token去獲取用戶信息。希望我說的對你有幫助!
回答2:提示很清楚code已經(jīng)被使用了,code只能被使用一次。
回答3:你授權(quán)的處理部分有問題,授權(quán)拿到用戶信息之后就保存到session里面去 你授權(quán)之后沒有保存到session中,導(dǎo)致刷新頁面后,session中沒有用戶信息,但是地址中還帶有code參數(shù),于是就拿著code去拿授權(quán),但是這個code已經(jīng)用過了,code只能用一次的
回答4:是這樣,OAuth2.0的授權(quán)URI指定參數(shù)有類似response type,authorization code,state之類的,你調(diào)用微信OAuth2.0授權(quán)接口,傳入了各種appid appsecret,就是為了獲取authorization code用的,這個code干嘛的呢,是第三方(也就是你,用戶授權(quán)你訪問他在微信的資源)用來和OAuth授權(quán)服務(wù)器換取AccessToken用的,也就是調(diào)用我開篇講的授權(quán)URI使用的參數(shù),在OAuth2.0規(guī)范里,該URI返回的參數(shù)包括AccessToken,RefreshToken等等,有了這個AccessToken,你就可以用它和資源服務(wù)器進行驗證從而拿到用戶資源了,那么OAuth2.0規(guī)定了,為了安全,這個authorization code只能換取一次AccessToken。
那么微信是怎么實現(xiàn)的呢,他們的授權(quán)接口包括了response type,redirect uri,state,appid,appsecret等參數(shù),他們的邏輯就是用戶先調(diào)用這個授權(quán)接口,然后進行授權(quán)(或靜默授權(quán)),當(dāng)用戶確定授權(quán)后,此時調(diào)用的仍然是微信授權(quán)接口,微信授權(quán)服務(wù)器確認(rèn)授權(quán)后,將請求重定向至你設(shè)定的redirect uri,并且在這個uri中添加URL參數(shù)code及state,這個code就是authorization code,于是你的服務(wù)器就會通過這次重定向收到authorization code,你就可以用這個code去換取AccessToken,進而獲取到用戶在微信的各種資源了(比如open id)。
所以你說為什么刷新報錯,我嚴(yán)重懷疑你刷新的是你自己服務(wù)器的url,然后你的代碼又獲取了一次相同的code,再去兌換,當(dāng)然就報錯code重復(fù)使用了。
回答5:關(guān)注一下,是否連續(xù)進行了兩次請求(使用同樣code換取用戶信息),導(dǎo)致第二次使用該code出現(xiàn)該錯誤
回答6:你點過微信支付了嗎,那個 支付 按鈕只能點一次,調(diào)起來支付后,如果取消支付,再去點擊 支付,就報錯了,只能退出當(dāng)前頁面,重新進!
回答7:樓主解決 了嗎,我也遇到同樣的問題了 ?
相關(guān)文章:
1. mysql - AttributeError: ’module’ object has no attribute ’MatchType’2. javascript - JS設(shè)置Video視頻對象的currentTime時出現(xiàn)了問題,IE,Edge,火狐,都可以設(shè)置,反而chrom卻...3. javascript - 圖片能在網(wǎng)站顯示,但控制臺仍舊報錯403 (Forbidden)4. MySQL客戶端吃掉了SQL注解?5. 網(wǎng)頁爬蟲 - python爬蟲翻頁問題,請問各位大神我這段代碼怎樣翻頁,還有價格要登陸后才能看到,應(yīng)該怎么解決6. 數(shù)據(jù)庫 - MySQL 單表500W+數(shù)據(jù),查詢超時,如何優(yōu)化呢?7. objective-c - iOS怎么實現(xiàn)像QQ或者微信的實時推送8. php自學(xué)從哪里開始?9. 求大神幫我看看是哪里寫錯了 感謝細(xì)心解答10. phpstady在win10上運行
