微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
解决方式:利用redis做缓存处理redis后续会更新怎么配置如何使用,本次只单一针对微信请求问题做缓存解决微信请求问题
代码部分:
// 获取链接
JedisConnection con = redisConnectionFactory.getConnection();
Jedis jedis = con.getNativeConnection();
// 定义key值 返回结果staToken前台自己定义一个唯一的码就行
// setnx 成功设置返回1没设置返回0 后续有设置这个值的存在时长60s
long s = jedis.setnx(staToken+"formkey","0");
if(s == 0){
//key 存在
//获取缓存token第一次程序运行后会给这个对象赋值
String formtoken = jedis.get(staToken);
//如果这个值不为空会直接返回结果而不去再次运行代码
if(formtoken == null){
JSONObject jsonObject=null;
Map<String, Object> m = new HashMap<String, Object>();
try {
//程序等待3秒(等待第一次结果)
Thread.currentThread().sleep(3000);
//获取缓存token
String formtoken_1 = jedis.get(staToken);
//3s后程序运行成功后会给这个对象赋值
if(formtoken_1 == null){
m.put("Message", "您的网络较慢,请稍后重试");//创建订单成功或失败信息
m.put("status", 9); //
jsonObject = JSONObject.fromObject(m);
out.print(jsonObject);
out.flush();
out.close();
}
m = JsonProcessUtil.jsonToBean(formtoken_1, Map.class);
jsonObject = JSONObject.fromObject(m);
out.print(jsonObject);
out.flush();
out.close();
} catch (InterruptedException e) {
e.printStackTrace();
m.put("Message", "网络异常,请稍后再试");//创建订单成功或失败信息
m.put("status", 2); //
jsonObject = JSONObject.fromObject(m);
out.print(jsonObject);
out.flush();
out.close();
}
}else{
JSONObject jasonObject = JSONObject.fromObject(formtoken);
out.print(jasonObject);
out.flush();
out.close();
}
}else{
//设置60秒过期
jedis.expire(staToken+"formkey",60);
实际程序运行内容区
你想写的内容
//将结果加入缓存,设置60秒过期清空key
jedis.setex(staToken,60, String类型结果对象);
}
前台随机码:
var x="0123456789qwertyuioplkjhgfdsazxcvbnm";
var tmp="";
var timestamp = new Date().getTime();
for(var i=0;i<30;i++) {
tmp += x.charAt(Math.ceil(Math.random()*100000000)%x.length);
}
// 随机码+当前时间+openid 足够唯一的了
var staToken=tmp+timestamp+Openid;
仅供参考
欢迎各位朋友交流,互相帮助提升自我!