微信授權錯誤:"errcode":40163,"errmsg":"codebeenused

来源:https://www.cnblogs.com/feiquan/archive/2019/05/21/10902536.html
-Advertisement-
Play Games

轉自:微信授權錯誤:"errcode":40163,"errmsg":"codebeenused 微信網頁授權獲取code值回調兩次的問題 1.說是功能變數名稱原因,目前未測試,沒有正確的功能變數名稱 問題描述:在調用微信網頁授權獲取openid值時,先獲取的code值,但是code值的介面 會走兩次回調。而cod ...


轉自:微信授權錯誤:"errcode":40163,"errmsg":"codebeenused

 

微信網頁授權獲取code值回調兩次的問題

1.說是功能變數名稱原因,目前未測試,沒有正確的功能變數名稱

  1. 問題描述:在調用微信網頁授權獲取openid值時,先獲取的code值,但是code值的介面 會走兩次回調。而code在6分鐘內只能用一次,所以處出現code失效的問題,問題顯示錯誤碼:{‘errcode’:40029,’errmsg’:’invalid code, hints: [ req_id: 0407ns44 ]’}
  2. 解決辦法: 出現這個問題是因為功能變數名稱的問題,本人先使用的花生殼的內網穿透,但是花生殼的免費功能變數名稱應用的是第三方代理功能變數名稱,所以在向微信伺服器發送請求的時候,微信回調時,會認為你的功能變數名稱請求不一致,會回調兩次,重定向你的伺服器兩次,只需更改正式功能變數名稱即可。就會回調一次。(網上說的返回值結束二次回調,和301重定向 都是坑人的,折騰一天還是功能變數名稱問題

2.說需要一個參數 &connect_redirect=1,這個是解決40029的錯誤

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 //實際使用生成url的代碼 <br>string UrlUserInfo = OAuthApi.GetAuthorizeUrl(AppId,                 "http://2a20h48668.imwork.net/weixin/UserInfoCallback?returnUrl=" + returnUrl.UrlEncode(),                 state, OAuthScope.snsapi_userinfo);      // 摘要:         //     獲取驗證地址的API,以及參數說明         //         // 參數:         //   appId:         //     公眾號的唯一標識         //         //   redirectUrl:         //     授權後重定向的回調鏈接地址,請使用urlencode對鏈接進行處理         //         //   state:         //     重定向後會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128位元組         //         //   scope:         //     應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取用戶openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到昵稱、性別、所在地。並且,即使在未關註的情況下,只要用戶授權,也能獲取其信息)         //         //   responseType:         //     返回類型,請填寫code(或保留預設)         //         //   addConnectRedirect:         //     加上後可以解決40029-invalid code的問題(測試中)         public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, OAuthScope scope, string responseType = "code"bool addConnectRedirect = true);

  最終網址結果

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd84d9cb4875236c9&redirect_uri=http%3A%2F%2F2a20h48668.imwork.net%2Fweixin%2FUserInfoCallback%3FreturnUrl%3D%252FWeixinJSSDK%252Findex&response_type=code&scope=snsapi_userinfo&state=JeffreySu-954&connect_redirect=1#wechat_redirect

3.訪問的地址是

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 /// <summary>        /// OAuthScope.snsapi_userinfo方式回調        /// </summary>        /// <param name="code"></param>        /// <param name="state"></param>        /// <param name="returnUrl">用戶最初嘗試進入的頁面</param>        /// <returns></returns>        public ActionResult UserInfoCallback(string code, string state, string returnUrl)        {            if (string.IsNullOrEmpty(code))            {                return Content("您拒絕了授權!");            }            var orginState = data.getState();              if (state != orginState)            {                //這裡的state其實是會暴露給客戶端的,驗證能力很弱,這裡只是演示一下,                //建議用完之後就清空,將其一次性使用                //實際上可以存任何想傳遞的數據,比如用戶ID,並且需要結合例如下麵的Session["OAuthAccessToken"]進行驗證                return Content("驗證失敗!請從正規途徑進入!");            }              OAuthAccessTokenResult result = null;              //通過,用code換取access_token            try            {                result = OAuthApi.GetAccessToken(AppId, AppSecret, code);            }            catch (Exception ex)            {                return Content(ex.Message);            }            if (result.errcode != ReturnCode.請求成功)            {                return Content("錯誤:" + result.errmsg);            }            //下麵2個數據也可以自己封裝成一個類,儲存在資料庫中(建議結合緩存)            //如果可以確保全全,可以將access_token存入用戶的cookie中,每一個人的access_token是不一樣的            HttpContext.Session.SetString("OAuthAccessTokenStartTime", DateTime.Now.ToString());            HttpContext.Session.SetString("OAuthAccessToken", result.ToJson());              //因為第一步選擇的是OAuthScope.snsapi_userinfo,這裡可以進一步獲取用戶詳細信息            try            {                if (!string.IsNullOrEmpty(returnUrl))                {                    return Redirect(returnUrl);                }                  OAuthUserInfo userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid);                return View(userInfo);            }            catch (ErrorJsonResultException ex)            {                return Content(ex.Message);            }        }

  //建議將result存入資料庫中,確保值訪問一次


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景 在使用 DevExpress 的 GridControl 為其實現 Checkbox 列,發現如果勾選了三行的數據,在遍歷 GridControl 綁定的數據源時 Checkbox 列的數據僅有 2 行被更新。 原因 使用 Google 搜索了半天,在 DevExpress 的 "Suppor ...
  • 大體來說,是環境的問題。 第一個錯誤,如圖: 1. 查了網上說是文件夾許可權的問題,依次設置了Everyone許可權和IIS_IUSER許可權,能勾選的都勾選了,然而並沒有什麼用,看來不是這個問題導致的。 2. 項目是.net core 2.0,所以想,可能是環境問題,需要安裝 AspNetCoreMod ...
  • 分支語句: 1.if語句:適合判斷一些連續的值,可配合else語句或else if語句使用 使用語法: if (條件1) {代碼1} else if(條件2) {代碼2} else {代碼N} 1 Console.Write("請輸入一個整數:"); 2 int a = int.Parse(Cons ...
  • 文件樹結構 Nuget.Server 網站代碼 參考文檔:https://poychang.github.io/output-static-content-file-to-project-in-dotnet-core-nuget-pack/ ...
  • 1.前言 面向對象設計(OOD)里有一個重要的思想就是依賴倒置原則(DIP),並由該原則牽引出依賴註入(DI)、控制反轉(IOC)及其容器等老生常談的概念,初學者很容易被這些概念搞暈(包括我在內),在學習Core依賴註入服務之前,下麵讓我們先瞭解下依賴倒置原則(DIP)、依賴註入(DI)、控制反轉( ...
  • 1 -x 指定訪問IP與埠號curl -x 192.168.4.12:80 http://www.jackyops.com2 響應時長 curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{tim ...
  • 特殊許可權SUID SUID : 運行某程式時,相應進程的屬主是程式文件自身的屬主,而不是啟動者: chmod u+s File chmod u-s File 如果 FileB本身原來就有執行許可權,則SUID顯示為s;否則顯示S SGID : 運行某程式時,相應進程的屬組是程式文件自身的屬組,而不是啟 ...
  • eg: vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx # ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...