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

來源:互聯網
上載者:User

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

錯誤情況概述:

啟動應用之後,調用 相機拍照 等介面是可以正常使用的, 但是過了一段時間(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的擷取失敗!

查看想代碼:

核心代碼:

    @Overridepublic 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_ticketjsapiTicketUrl += 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 的參數有錯誤。

 

 

 

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.