{"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 的参数有错误。
{"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——记录一次微信错误处理的更多相关文章
- 微信开发之门店管理{"errcode":40097,"errmsg":"invalid args hint: [xxxxxxx]"}
最近在做微信端开发,做到门店开发部分,在创建门店的时候遇到40097问题{"errcode":40097,"errmsg":"invalid args ...
- 微信小程序:模板消息推送提示{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXXXX]”}
在开发小程序 模板消息定时推送功能时,在开发版测试程序功能运行正常,但提交到线上后提示报错{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXX ...
- 微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint
微信公众号开发自从支持允许在群发图文中插入小程序,方便了小程序的运营及推广.最近在三方服务开发中,要支持图文素材插入小程序遇到了一个很是棘手的问题.官方给出的插入小程序的示例支持文字.图片.卡片.如下 ...
- 【微信错误】{"errcode":"40013","errmsg":"invalid appid hint: [mackRA06203114]","success":false}
一.异常背景 发送可以跳转小程序的公众号模版消息 二.原因 当前公众号没有和被跳转的小程序关联 三.解决办法 去公众号平台将小程序和公众号进行关联就可以了
- me.chanjar.weixin.common.error.WxErrorException: {"errcode":40013,"errmsg":"invalid appid hint: [xxxxxxxxxx]"}
错误解决思路: 1.看看appid和appsecret的配置信息是否正确 2.查看前后端通信的http或者https协议是否正确( http://xxxxxxx 写成https://xxxxxxx)
- 微信小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint:
小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint: 我是使用的微信支付发送模板消息,提示的formid无效的 大家 ...
- Solve Error: "errcode": 40016, "errmsg": "invalid button size hint"
在使用微信官方给的添加自定义菜单的示例代码: { "button": [ { "name": "扫码", "sub_button& ...
- Java微信开发_Exception_02_"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint
ip查询网址: http://www.ip.cn/ 一.异常现象 今天开始做微信开发,在办公室时能正常获取access_token,晚上回家之后获取access_token时却报出下列错误信息: {& ...
- 获取access_token时却报出下列错误信息:{"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint: [KJZfAa0644e575]"},以及一些其他报错
获取access_token时却报出下列错误信息:{"errcode":40164,"errmsg":"invalid ip 61.172.68.21 ...
随机推荐
- MyBatis在insert插入操作时返回主键ID的配置
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过Mapper.XML配置的方式来完成这个功能. 在 INSER ...
- hibernate一对一外键双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Java Thread 的 sleep() 和 wait() 的区别
Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别 1. sleep ...
- backup3:master 数据库的备份和还原
在SQL Server 中,master 数据库记录系统级别的元数据,例如,logon accounts, endpoints, linked servers, and system configur ...
- 使用 Ghost 写博客
今天在https://ghost.org/上试用了一会,发现这是一个出色的博客平台,相比WordPress,更轻量级,而且是使用Node.js来做的,性能也是非常的不错. 优点 轻量级 支持主题 支持 ...
- 【前端安全】JavaScript防http劫持与XSS
作为前端,一直以来都知道HTTP劫持与XSS跨站脚本(Cross-site scripting).CSRF跨站请求伪造(Cross-site request forgery).但是一直都没有深入研究过 ...
- CGI与FastCGI
当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂, ...
- 禁止页面后退JS(兼容各浏览器)
<script src="${ctxPath}/media/lib/jquery.history.js"></script> <script> ...
- 计算机网络学习笔记--网络层之IP地址与子网
IPv4地址: 我们知道在网络层(TCP/IP体系结构的网际互联层),最重要的一个协议就是IP协议,现在正处于IPv4和IPv6的过渡时期,但目前来说,IPv4仍为主流,所以主要讲Ipv4. IP地址 ...
- CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...