微信企业号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问题 。


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
您好!关于微信登录的OAuth2认证流程,我可以帮您介绍一下。首先,您需要在微信开放平台上创建一个应用,并获取应用的AppID和AppSecret。然后,您可以按照以下步骤进行微信登录的认证流程: 1. 在您的登录页面上显示微信登录按钮,让用户点击该按钮进行微信登录。 2. 当用户点击微信登录按钮后,将会跳转至微信授权页面。您需要将用户授权跳转链接设置为如下格式: ``` https://open.weixin.qq.com/connect/qrconnect?appid={appid}&redirect_uri={redirect_uri}&response_type=code&scope=snsapi_login&state={state}#wechat_redirect ``` 其中,{appid}是您的应用AppID,{redirect_uri}是用户授权完成后的回调地址,{state}是您自定义的参数,用于校验请求的合法性。 3. 用户在微信授权页面进行登录,并确认授权。 4. 微信服务器会将授权码(code)返回给您的回调地址,您需要在回调页面中获取该授权码。 5. 使用授权码向微信服务器发送请求,获取访问令牌(access_token)和用户唯一标识(openid)。请求示例如下: ``` https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code ``` 其中,{appid}是您的应用AppID,{secret}是您的应用AppSecret,{code}是获取到的授权码。 6. 微信服务器会返回访问令牌和用户唯一标识等信息。 7. 您可以使用访问令牌和用户唯一标识来调用微信开放平台的其他接口,获取用户信息或进行其他操作。 以上就是使用OAuth2进行微信登录认证的基本流程。希望对您有所帮助!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值