微信遇到特殊服务器,解决微信网页授权,出现errcode:40163,errmsg:codebeenused,看似微信访问了2次这个回调接口的问题...
先說說自己理解的微信機制:
微信內訪問自己服務器的頁面,如果訪問出錯,微信就會認為是微信自身的問題,那么他就會開啟另外一個IP來訪問這個頁面(什么上海的IP,深圳的IP不等),再把訪問結果發回用戶端,但是如果另外來的那個IP訪問也出錯,就會返回到一個微信自己定義的404頁面(什么找人信息之類的)
如果我們本身服務器頁面也出錯了,那么隨便怎么訪問都是出錯的。。。那么問題來了,如果這個服務器出錯的訪問是用在微信網頁授權上面呢?
首先看下流程:
微信內調用網頁授權,首先是服務器發起訪問一個微信網頁授權的地址,帶上回調地址。這個發起訪問一般都沒問題,按照那個文檔來就可以,然后微信會主動訪問你那個自己服務器的回調地址,并且帶上一個參數code,然后自己的服務器接收到這個參數后,就把這個參數組裝加密什么的,再去訪問相關地址獲取access_token,最終獲取到用戶信息,獲取用戶信息后,服務器還必須 反一個頁面給用戶,
那么在接到code到最終反一個頁面給用戶的過程中,如果本身程序就有錯誤,特別是在使用了這個code過后的出錯,服務器反會錯誤了,那么這個時候,微信會根據最上面的原理,再次開啟另外一個IP來訪問,并且同樣帶和上次一樣的code參數。這樣你服務器又會去根據這個code參數去完成同樣一次申請,這個時候,你表面上看起,就是報40163錯誤。說code被用了,但實際上是因為微信被迫開啟另外一個ip來訪問你的。。
那么我測試,只要是正常流程,微信只會訪問一次你的回調接口。。。
這篇文章的問題 是出在我用API發紅包的時候,在微信的回調里面,獲取用戶OPENID后,就去執行發紅包的post了,結果這個里面出錯(本地調試正常,部署到服務器里面就出錯了。。。哎。。。。),然后日志里面就顯示"errcode":40163,"errmsg":"codebeenused。。
實際上本身就是我自己程序的問題。。
普遍遇到的code been used問題:
基本思路:當我點擊菜單按鈕進入頁面時,先去sssion緩存中去那由code獲取到的openId,如果openId不存在,則證明code為首次使用,可以根據傳過來的code獲取相應的access_token和openId。
總結
以上是生活随笔為你收集整理的微信遇到特殊服务器,解决微信网页授权,出现errcode:40163,errmsg:codebeenused,看似微信访问了2次这个回调接口的问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css怎样通过超链接更改背景,css超链
- 下一篇: 高性能dhcp服务器,基于线程池机制的高