spring mvc下微信网页授权出错 40163

neilchen226 2017-02-13 07:14:45
微信网页授权时,获取了code,使用code获取用户信息时一直无法获取,接口返回数据为:
"errcode":40163,"errmsg":"code been used“

使用的是spring mvc框架处理回调的url,在回调的url中调用微信接口获取用户信息

具体的实现如下:

/*
* 生成微信授权请求地址
* 提供需要获取用户信息的请求地址,将其放入回调地址的请求参数中,在回调地址请求成功后,再跳转到该地址
*/

@RequestMapping("/wechat/home/oauth2")
public String Oauth2API(HttpServletRequest request, @RequestParam String resultUrl) {
String redirectUrl = "";
if (resultUrl != null) {
String reqUrl = request.getLocalAddr();
String backUrl = "http://" + reqUrl + "/wechat/home/oauth2url?oauth2url=" + resultUrl;
log.debug("授权回调地址: " + backUrl);
try {
redirectUrl = WxUtil.getOAuthUrl(backUrl, "snsapi_userinfo",new Date().getTime()+"");//生成授权地址,三个参数分别为 回调地址,授权方式,state参数
log.debug("微信授权请求地址: " + redirectUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
return "redirect:" + redirectUrl;
}
/*
* 访问微信授权后请求的地址
*
*/

@RequestMapping(value = { "/wechat/home/oauth2url" })
public String Oauth2MeUrl(HttpServletRequest req,HttpSession session, @RequestParam String code, @RequestParam String oauth2url) {
System.out.println("授权携带参数: "+req.getQueryString());
log.debug("code = 【" + code + "】, 跳转地址: 【" + oauth2url + "】");
JSONObject json = WxService.getWebAccessToken(code);//调用微信接口获取用户信息
if (json != null && json.containsKey("openid")) {
String openid = json.getString("openid");
System.out.println("保存openid到session: " + openid);
session.setAttribute("openid", openid);
}
return "redirect:" + oauth2url;
}
...全文
33384 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂妄的老头 2018-06-04
  • 打赏
  • 举报
回复
又一年了,感觉我可以助攻一波。你们到底解决了没有啊?公司是不是已经等倒闭了???
谢寿珠 2018-05-16
  • 打赏
  • 举报
回复
这个问题压根不是代码的问题,是你的公众号里面的白名单问题。spring mvc的ip地址是不是在白名单里面
YouCanYouUp_ 2018-05-15
  • 打赏
  • 举报
回复
引用 37 楼 z412660102 的回复:
[quote=引用 7 楼 neilchen226 的回复:] [quote=引用 5 楼 luojf945 的回复:] 楼主解决了嘛?我昨天也遇到同样的问题了!!!!!
有谁知道怎么解决吗...困扰两天了,我尝试不适用spring mvc,单纯的servlet使用Filter拦截处理这个code获取用户信息时没这个错误,但使用了spring mvc就有这问题,难道是spring mvc中要做什么配置? [/quote] 怎么解决的,我使用spring mvc一样总是返回40163[/quote] spring mvc怎么解决的???
Sias丶小殇 2018-04-09
  • 打赏
  • 举报
回复
18年了,我来看看你们解决了没?到底是微信坑?还是咱们方法没有用对?困扰这么久,微信支付就这破瘠薄接口还怎么去跟支付宝去VS?
「已注销」 2017-12-18
  • 打赏
  • 举报
回复
然后这个问题困扰你们一年都没有解决?。。。
li_cong121 2017-11-13
  • 打赏
  • 举报
回复
引用 36 楼 mackwang0213 的回复:
我也遇到这个问题,解决办法是:避免重复发送授权链接。比如你已经获取用户信息,但你刷新页面,获得重新返回该页面,导致相同的授权链接再次请求,产生错误。那么,我们如何避免再次请求呢?把获取的用户信息保存在session中,每次发送请求前,检查是否已经获取,如果已经获取用户信息,就不再请求。 我自己的实际解决办法是:获取用户信息后,进行重定向,那么无论是刷新还是从下一页面返回来,都将是请求重定向后的链接,不会再重复发送授权链接。就不会再产生这个错误。
我想看一下代码,好吗。。。老大
li_cong121 2017-11-13
  • 打赏
  • 举报
回复
引用 7 楼 neilchen226 的回复:
[quote=引用 5 楼 luojf945 的回复:] 楼主解决了嘛?我昨天也遇到同样的问题了!!!!!
有谁知道怎么解决吗...困扰两天了,我尝试不适用spring mvc,单纯的servlet使用Filter拦截处理这个code获取用户信息时没这个错误,但使用了spring mvc就有这问题,难道是spring mvc中要做什么配置? [/quote]楼主怎么用的filter,,请帮指点
兰朝晖 2017-10-27
  • 打赏
  • 举报
回复
我也是遇到类一样的问题!!!!!!!!求解
那丨抹微笑 2017-09-30
  • 打赏
  • 举报
回复
今天我也遇到了这个问题,我有个想法是,当第一次发送请求的时候,将code和请求回来的信息全部写入session中,每一次向微信请求的时候都先判断一下session中是否有对应的信息,如果session中没有信息则再次请求,如果有则直接读取session中的信息。初来乍到,还望大神们指点
z412660102 2017-08-29
  • 打赏
  • 举报
回复
引用 7 楼 neilchen226 的回复:
[quote=引用 5 楼 luojf945 的回复:] 楼主解决了嘛?我昨天也遇到同样的问题了!!!!!
有谁知道怎么解决吗...困扰两天了,我尝试不适用spring mvc,单纯的servlet使用Filter拦截处理这个code获取用户信息时没这个错误,但使用了spring mvc就有这问题,难道是spring mvc中要做什么配置? [/quote] 怎么解决的,我使用spring mvc一样总是返回40163
mackwang0213 2017-06-21
  • 打赏
  • 举报
回复
我也遇到这个问题,解决办法是:避免重复发送授权链接。比如你已经获取用户信息,但你刷新页面,获得重新返回该页面,导致相同的授权链接再次请求,产生错误。那么,我们如何避免再次请求呢?把获取的用户信息保存在session中,每次发送请求前,检查是否已经获取,如果已经获取用户信息,就不再请求。 我自己的实际解决办法是:获取用户信息后,进行重定向,那么无论是刷新还是从下一页面返回来,都将是请求重定向后的链接,不会再重复发送授权链接。就不会再产生这个错误。
xinyi10096 2017-03-28
  • 打赏
  • 举报
回复
引用 34 楼 xinyi1096 的回复:
我也是PHP遇到同样的问题,差不多同样的代码,在scope参数是snsapi_base时没问题,是snsapi_userinfo就会提示这个错误;特别纳闷,往知道的能给予指导啊
我感觉还是微信的api的问题吧,我重新关注微信公众号,再访问这个方法就好了;还不是很完美,有更好的办法还望大牛分享下
xinyi10096 2017-03-28
  • 打赏
  • 举报
回复
我也是PHP遇到同样的问题,差不多同样的代码,在scope参数是snsapi_base时没问题,是snsapi_userinfo就会提示这个错误;特别纳闷,往知道的能给予指导啊
a2241707 2017-03-22
  • 打赏
  • 举报
回复
我也是遇到这个问题了,感觉是微信的服务器的问题,然后今天微信开发公众号发来消息说要把code提高为128位。
ylg5132976 2017-03-21
  • 打赏
  • 举报
回复
怎么解决的啊??以前都没有这个问题的啊、
Bingorl 2017-03-17
  • 打赏
  • 举报
回复
我也遇到了这个问题,我自己程序里的log显示,授权成功之后,又进行了一次授权,但是我只在菜单跳转时进行了一次授权操作,怎么会重复授权两次的;另外这个现象好像不是一直出现的,不知道有没有什么解决方案?
qq_24630527 2017-03-14
  • 打赏
  • 举报
回复
解决没有???求教
qq_30764911 2017-03-08
  • 打赏
  • 举报
回复
引用 10 楼 xsrsl1688 的回复:
可以了,api的bug
怎么解决的,求教
qq_30764911 2017-03-08
  • 打赏
  • 举报
回复
这个问题楼主解决了吗?
hash_boy 2017-03-04
  • 打赏
  • 举报
回复
好高难度的问题呀,我也感兴趣。
加载更多回复(26)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧