昨天我負責的一個項目突然出現了一個十分詭異的bug,進行微信受權登陸的時候請求code的時候安卓手機會屢次重定向調轉個人接口接收code的接口(redirect_uri 微信請求調轉接收code的的接口,加了Url.encode()
),也就是我這邊默認請求了屢次這個接口,然而蘋果手機沒有問題,因而我寫了日誌看了下沒錯,有時候會請求兩次或者更屢次這個重定向的接口地址,因此致使了與用戶登陸進去之後,報 {「errcode」:40163,"errmsg":"code been used"} 這裏提示已經很是的明白,code已經被使用過了,爲什麼這個項目上線後了三四個月了,纔會出現這個問題,而後我其餘的項目也是使用一樣的微信受權登陸的寫法都徹底沒毛病。api
結合這個問題我到網上查找了一些解決方案,有人說使用緩衝把第一次獲取的code存入緩衝,而後再請請求的時候判斷是否存在這個值,這種方法雖然聽起來挺合理的,可是徹底不符合開發原諒,而且沒有從更本上找到問題。安全
還有一種方式就是在請求連接中加上一個參數:connect_redirect=1 ( 微信請求code的接口:https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxx&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect),不少人的屢次請求都加上這個參數解決了,而我發現個人並非這個問題,不過假如大家遇到了這個問題能夠試一試也許有用。服務器
最後我發現不管我怎麼改動個人代碼,微信仍是默認會返回多個一樣的code給我,最後我在個人服務器採起網絡抓吧,結果終於讓我找到了bug的源頭,原來是360安全衛士搞得鬼,每次會員請求一次讓後360也會模擬一次請求,致使了有時候多吃請求,把360一關閉就行了,真的是太坑了,熬夜整整搞了一天,這個鍋終於不用我背了,網站又能夠正常運行了。微信
經過此次我知道了,其實有的時候咱們在找bug的時候不單單隻去找程序的代碼是否有問題,還應該從服務器,網絡環境等多個方面去尋找,不能在一棵樹上吊死!!網絡