1. 程式人生 > >微信授權,重定向兩次

微信授權,重定向兩次

二次 conn 有意思 退出 err 請求 cnblogs str 關鍵字

做微信支付的時候,需要微信授權拿openId

大概流程就是,把用戶重定向到微信一個地址,然後微信帶著code重定向回來,然後拿code換用戶的openId

這期間發生了一件比較有意思的事情,android版的微信授權失敗導致沒法支付,看了一下服務器上報錯如下

System.Collections.Generic.KeyNotFoundException: 給定關鍵字不在字典中。
在 System.Collections.Generic.Dictionary`2.get_Item(TKey key)
在 WxPayAPI.JsApiPay.GetOpenidAndAccessTokenFromCode(String code)
{"errcode":40163,"errmsg":"code been used, hints: [ req_id: tivCza01272165 ]"}

我支付代碼是和官方demo一樣的,基本沒改。

然後看到這個錯誤,我第一反映是打一下日誌,我把授權頁面打上了日誌,記錄了一下訪問時間和訪問的url完整地址,也就是包含參數部分的。

然後再把用code換openId的result也用日誌記錄了。

然後發現

我請求拿code後,微信同一個code給我重定向回來了兩次,第一次我換取到了openId,第二次沒換到openI的,錯誤內容是 code has been used,也就是code被使用過了。

所以問題肯定是出在兩次重定向。但是為什麽會同一個code重定向兩次?我搜了一下,很多開發同學都碰到過,有的人請求授權的時候加了一個參數 &connect_redirect=1 ,我看了一下很多人的反饋,有些人是可以解決問題的,有些人依然沒解決,比如我。。。。。

然後搜來搜去,還有人在園子裏說是360搞的鬼,見帖子: http://www.cnblogs.com/Can-daydayup/p/10128324.html

然後我服務器也安裝了 360 ,然後我一退出就不會了。所以我想問問@MJ0011,為什麽我們服務器發起請求,你360要做一次?

360能給個說法麽?這是要解決什麽問題所以要重發一個請求?

微信授權,重定向兩次