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

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

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


你可能感兴趣的:(微信企业号OAuth2接口40029错误解决方案)