作微信支付的時候,須要微信受權拿openIdhtml
大概流程就是,把用戶重定向到微信一個地址,而後微信帶着code重定向回來,而後拿code換用戶的openIdandroid
這期間發生了一件比較有意思的事情,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完整地址,也就是包含參數部分的。url
而後再把用code換openId的result也用日誌記錄了。日誌
而後發現code
我請求拿code後,微信同一個code給我重定向回來了兩次,第一次我換取到了openId,第二次沒換到openI的,錯誤內容是 code has been used,也就是code被使用過了。htm
因此問題確定是出在兩次重定向。可是爲何會同一個code重定向兩次?我搜了一下,不少開發同窗都碰到過,有的人請求受權的時候加了一個參數 &connect_redirect=1 ,我看了一下不少人的反饋,有些人是能夠解決問題的,有些人依然沒解決,好比我。。。。。blog
而後搜來搜去,還有人在園子裏說是360搞的鬼,見帖子: http://www.cnblogs.com/Can-daydayup/p/10128324.html
而後我服務器也安裝了 360 ,而後我一退出就不會了。因此我想問問@MJ0011,爲何咱們服務器發起請求,你360要作一次?
360能給個說法麼?這是要解決什麼問題因此要重發一個請求?