这几天搞企业号,在跳转到网页获得用户授权的时候老是出问题第一次还好,成功获得授权,退出之后再次进入就是不行了。
文档里面说最好是缓存cookie,可以,但是当cookie失效后呢?再次进入就出问题了 报{'errcode':40029,'errmsg':'invalid code‘}
用工具一查尼玛,微信居然默认把第一次的正常请求废掉了(老子能骂脏话吗?)自己手机发起第二次请求,带的code还是第一次的 ,这个在5分钟内是不能重复的,所以报错40029.接着就上百度一顿查,有什么加&connect_redirect=1这个参数的,有try catch 的 ,我就问一下了,你们自己试过吗?就敢放到网上来浪费大家时间?
于是没有一个合理的解决方法,只能自己解决了。调用微信的接口工具,发现其实第一次的参数都是正确的,只不过被废掉了而已,那如果发现40029 那么重新再发一次原来的请求不就行了嘛?
好 上代码
public static String GetUserID (String access_token,String code ,String agentid){
String UserId = "";
CODE_TO_USERINFO = CODE_TO_USERINFO.replace("ACCESS_TOKEN", access_token).replace("CODE", code).replace("AGENTID", agentid);
JSONObject jsonobject = WeixinUtil.HttpRequest(CODE_TO_USERINFO, "GET", null);
if(null!=jsonobject){
if (jsonobject.containsKey("errcode") ){ //是否有错误
if (jsonobject.getString("errcode").equals("40029")){ //是否为code错误
String newstr= CODE_TO_USERINFO.substring(0, CODE_TO_USERINFO.indexOf("&code=")).concat("&code=").concat(code); //去除错误的code加入正确的
jsonobject = WeixinUtil.HttpRequest(newstr, "GET", null);//重新发起请求
}
}
UserId = jsonobject.getString("UserId"); //到这里应该能获得正确的用户信息了
}else{
System.out.println("获取授权失败");
}
return UserId;
}
好了方法就是这样 但是应该还有更好的办法,请大家多多指教,第一次在csdn发帖,各位大哥多多包涵
今天最终发现彻底解决这个问题的办法,我想出这个问题的应该都是下载了 WeiXinEnterprises 这个版本的java开发包吧,现在发现问题出现在这个身上
CODE_TO_USERINFO = CODE_TO_USERINFO.replace("ACCESS_TOKEN", access_token).replace("CODE", code).replace("AGENTID", agentid);
这个
replace("ACCESS_TOKEN", access_token) 居然不起作用,access_token永远是第一次获得的值 所以导致40029错误,可能是静态方法中这个值不能被改变吧。
方法 就是改一下了
直接赋值
String url ="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="+access_token+"&agentid="+agentid+"&code="+code;
成功解决40029问题 。