微信企业号OAuth2接口40029错误解决方案

来源:互联网 发布:能过淘宝账号查一个人 编辑:程序博客网 时间:2024/06/04 18:55

这几天搞企业号,在跳转到网页获得用户授权的时候老是出问题第一次还好,成功获得授权,退出之后再次进入就是不行了。

文档里面说最好是缓存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问题 。


1 0