{"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——记录一次微信错误处理

错误情况概述:

启动应用之后,微信调用 相机拍照 等接口是可以正常使用的, 但是过了一段时间(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 的参数有错误。

  

时间: 2024-10-07 07:04:49

{"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——记录一次微信错误处理的相关文章

微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint

微信公众号开发自从支持允许在群发图文中插入小程序,方便了小程序的运营及推广.最近在三方服务开发中,要支持图文素材插入小程序遇到了一个很是棘手的问题.官方给出的插入小程序的示例支持文字.图片.卡片.如下面api文档介绍: 按照示例插入文字小程序和图片小程序都没问题,但是插入卡片小程序却是一直报错errcode=45166,errmsg = invalid content hint.检查了好长时间,才发现卡片小程序的示例中data-progarm-imageurl参数写错了,应该是data-mini

Java微信开发_Exception_02_"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint

一.异常现象 今天开始做微信开发,在办公室时能正常获取access_token,晚上回家之后获取access_token时却报出下列错误信息: {"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint: [KJZfAa0644e575]"} 解读:错误代码:40164, 错误信息:无效ip,不在白名单中 于是开始往IP白名单这个方向思考,因为换了个地方,网

微信小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint:

小程序开发模板消息的时候  出现 errcode: 41028, errmsg: "invalid form id hint: 我是使用的微信支付发送模板消息,提示的formid无效的 大家知道获取到的prepay id 还非常的诡异  他不是直接一个参数 而是还带了字符串 比如 prepay_id=wx2017xx 这样格式的 那传递到微信模板消息这里的formid上要怎么传值呢? 最后检验是需要去除掉prepay id 这个字符串的  然后传递过去就可以了 然后,还会有提示无效的,就是没有支

Solve Error: "errcode": 40016, "errmsg": "invalid button size hint"

在使用微信官方给的添加自定义菜单的示例代码: { "button": [ { "name": "扫码", "sub_button": [ { "type": "scancode_waitmsg", "name": "扫码带提示", "key": "rselfmenu_0_0", "sub_butto

{"errcode":40017,"errmsg":"invalid button type hint: [I8nq_a0783sha1]"}

在开发微信公众号 添加菜单时遇到问题 一直提示:{"errcode":40017,"errmsg":"invalid button type hint: [I8nq_a0783sha1]"} 原因是:各个Button类中,属性type没有对应getType()方法,导致在生成的json字符串中就没有type {"button":[{"name":"点击","key":

微信 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"}

{"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"} 问题:微信网页授权后,获取到 openid 了,一刷新又没了 微信网页授权获取到的 code 只能使用一次(5分钟内有效),使用一次后,马上失效. 页面授权跳转成功,根据 code 也换取到 openid 了. 此时刷新页面,并不会再次进行授权,而是直接刷新了一下上一次授权跳转后的链接,带的还是

POST提交时总是报错: {"errcode":40017,"errmsg":"invalid button type"} 解决办法

开发语言:java 开发内容:微信公众号 自定义菜单 开发该连接的项目:点击打开链接 http://blog.csdn.net/blognkliming/article/details/16803093 执行MenuManage.java时报错: POST提交时总是报错:  {"errcode":40017,"errmsg":"invalid button type"} 网上找了很多资料,都没有解决问题.最后,在查看代码时发现,MenuManag

微信登陆问题{"errcode":40029,"errmsg":"invalid code, hints: [ req_id: xxxx]"}

微信登陆重新申请 由于在发起https://open.weixin.qq.com/connect/qrconnect请求时忘了把旧的appid改成新的,照成在请求https://api.weixin.qq.com/sns/oauth2/access_token(这个请求有更改新的appid和secret)时无法获取access_token.微信返回{"errcode":40029,"errmsg":"invalid code, hints: [ req_i

微信 errcode:40029 errmsg:invalid code

微信网页授权提示 errcode:40029 errmsg:invalid code 测试发现是因为不明原因请求两次导致code失效(code只能使用一次) 解决方法: 在返回页面加try catch解决,具体原因稍后待查. try { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //网站id String websiteId = request.get