{"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——記錄一次微信錯誤處理

来源:http://www.cnblogs.com/digdeep/archive/2016/08/06/5743362.html
-Advertisement-
Play Games

錯誤情況概述: 啟動應用之後,微信調用 相機拍照 等介面是可以正常使用的, 但是過了一段時間(2個小時左右--token/jsapi_ticket的過期時間),微信調用相機拍照的功能失效,啟用debug模式: //步驟三:通過config介面註入許可權驗證配置 wx.config({ debug: t ...


錯誤情況概述:

啟動應用之後,微信調用 相機拍照 等介面是可以正常使用的, 但是過了一段時間(2個小時左右--token/jsapi_ticket的過期時間),微信調用相機拍照的功能失效,啟用debug模式:

//步驟三:通過config介面註入許可權驗證配置
wx.config({
debug: true,

 

報錯:invalide signature....

利用調試介面調試:

http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

在 jsapi_ticket: 輸入本次失敗時的jsapi_ticket, 紅色信息顯示:jsapi_ticket 過期!

所以原因顯然是 過了2個小時之後,jsapi_ticket的獲取失敗!

查看想代碼:

核心代碼:

    @Override
	public void run() 
	{

		while(true) 
		{
			try{
				HttpsURLConnection conn = HttpUtil.initHttpsConnection(accessTokenUrl, "GET");
				String result = HttpUtil.getHttpsContent(conn, "utf-8");
				
				JSONObject json = null;
				if(result != null)
					json = JSON.parseObject(result);
				
				if(json != null){
					System.out.println("--------------AccessTokenJsapiTicketThread.222");
					accessToken = new AccessToken(json.getString("access_token"), json.getLong("expires_in"));
					System.out.println(JSON.toJSONString(json));
					// 再獲取jsapi_ticket
					jsapiTicketUrl += accessToken.getAccess_token() + "&type=jsapi";
					conn = HttpUtil.initHttpsConnection(jUrl, "GET");
					result = HttpUtil.getHttpsContent(conn, "utf-8");
					if(result != null){
						json = JSON.parseObject(result);
						if(json != null && json.getString("errmsg").equals("ok")){
							jsapiTicket = new JsapiTicket(json.getString("errcode"), json.getString("errmsg"), 
															json.getString("ticket"), json.getLong("expires_in"));
							System.out.println(JSON.toJSONString(json));
						}else{
							System.out.println(json.toJSONString());
							System.out.println("get jsapiTicket failed----");
						}
					}
				}else{
					System.out.println("get access_token failed----");
				}
			}catch(IOException e){
				e.printStackTrace();
			}
			
			System.out.println("--------------AccessTokenJsapiTicketThread.444");
			try{
				if(null != accessToken){
					Thread.sleep(60 * 1000);	// 如果access_token為null,60秒後再獲取
//					Thread.sleep((accessToken.getExpire_in() - 200) * 1000);	// 休眠7000秒
				}else{
					Thread.sleep(60 * 1000);	// 如果access_token為null,60秒後再獲取
				}
			}catch(InterruptedException e){
				System.out.println("--------------AccessTokenJsapiTicketThread.555");
				try{
					Thread.sleep(60 * 1000);
				}catch(InterruptedException e1){
					e1.printStackTrace();
				}
			}
		}
	}

後臺是 servlet隨伺服器啟動的一個線程,每隔2小時運行一次,獲取 token 和 jsapi_ticket.

關鍵的地方,在第二次獲取 jsapi_ticket 的地址是有問題的:

jsapiTicketUrl += accessToken.getAccess_token() + "&type=jsapi";

這裡導致 第二次 獲取 jsapi_ticket 時,攜帶上了 第一次的 token,也就是攜帶上兩個 token.

第二次的地址變成了:

https://api.weixin.qq.com/cgi-bin/ticket/getticket
?access_token=
HETAdAEwtAsz3GDeKwBxSq3JZt9FrD99vJc2Bvnp5ZmfU7BDVUR78TznZ8oQLmIGOqXfXOPYaJ8OlXBEdwlulf-XGkF1_K9FeHFUGndNIUIUMHjAEAEWR
&type=jsapi

qNpzWXz_d7GT1vchxHUuz5g5jqrwBb2OR5CXd7LldeDGsCa-8d8WQZkfDA157tcn_NmPglp-92c5AqTyqXTcM7aVG-Shw586QYjxmMVyrUxfz-P2GspidfCGAoEwvUsrKSHeAAARZO&

type=jsapi

可以看到 重覆了 一次 access_token 參數。所以導致了 獲取 jsapiTicket 失敗。

修改就極其簡單了:

String tmpUrl = jsapiTicketUrl + accessToken.getAccess_token() + "&type=jsapi";

conn = HttpUtil.initHttpsConnection(tmpUrl, "GET");
result = HttpUtil.getHttpsContent(conn, "utf-8");

定義一個臨時變數,不要直接修改 jsapiTicketUrl 這個類的屬性了。

 

總結:第一次成功,後面都失敗,應該想到是第二次的參數有問題了。

網上看到很多人遇到{"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}這個錯誤,基本沒有有價值的信息。還是自己調試解決問題。

記錄下,方便其他遇到相同問題的筒子。該錯誤一定是:url 的參數有錯誤。

 

 

 

  

 


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

-Advertisement-
Play Games
更多相關文章
  • 為什麼要創造Taurus.MVC:記得被上一家公司忽悠去負責公司電商平臺的時候,情況是這樣的:項目原版是外包給第三方的,使用:WebForm+NHibernate,代碼不堪入目,Bug無限,經常點著點著就掛了。一開始招了幾個實習的大學生在那玩,搞不定了,終於忽悠的我了,哈哈。。。當時進去的第一感覺是... ...
  • public static void InsertWithLob(OracleConnection conn) { if (conn!= null && conn.State == ConnectionState.Open) { try { string sqlText = "insert into ...
  • Insert測試,只測試1000條的情況,多了在實際的項目中應該就要另行處理了。 using System; using System.Collections.Generic; using System.Configuration; using System.Data.Entity; using S ...
  • 相信每一個開發的框架都會有一個工具類,工具類的作用有很多,通常我會將最常用的方法放在工具類里 當然每個開發框架的工具類都會不同,這裡我只收錄了這些方法,希望有更多需求的小伙伴也可以收錄進工具類里 1.取得用戶IP 做Web開發的一定會遇到獲取用戶IP的需求的,無論是用來記錄登錄時間,還是日誌的記錄, ...
  • ...
  • 參考: http://www.pythondoc.com/flask-restful/first.html 什麼是Rest Client-Server:伺服器端與客戶端分離。 Stateless(無狀態):每次客戶端請求必需包含完整的信息,換句話說,每一次請求都是獨立的。 Cacheable(可緩存 ...
  • 直接上代碼: 1. 前端調試代碼: 前端這裡 2. 後端介面: /getConfigInfo.json 介面是配置 jsapi 許可權認證。 /getPhoto.json 是從 微信伺服器下載照片,保存到我們自己的伺服器上。然後將我們自己伺服器的地方返回給前端使用。 ...
  • 1.課前雞湯 2.函數 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...