java-微信 网页授权,第一次能拿到用户信息,之后都拿不到

问题描述

微信 网页授权,第一次能拿到用户信息,之后都拿不到

报错:
{"errcode":40029,"errmsg":"req id: L3U1QA0347ns40, invalid code"}

授权链接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx26da4c9ef3b45d22&redirect_uri=http%3A%2F%2Fwx.yulin520.com%2Fa2a%2Fwechat%2Foauth&response_type=code&scope=snsapi_userinfo&state=1agj#wechat_redirect

java代码
public class WeChatUserInfoController {
private Log logger = LogFactory.getLog(WeChatUserInfoController.class);

private String get_access_token_url="https://api.weixin.qq.com/sns/oauth2/access_token?"
        + "appid=APPID"
        + "&secret=SECRET"
        + "&code=CODE&grant_type=authorization_code";

private String get_userinfo="https://api.weixin.qq.com/sns/userinfo?"
        + "access_token=ACCESS_TOKEN"
        + "&openid=OPENID"
        + "&lang=zh_CN";

@RequestMapping(value = "/oauth")
public String oauth(HttpServletRequest request, HttpServletResponse response) {
    logger.info("----- /wechat/oauth: 开始 -----");
    String code = ServletRequestUtils.getStringParameter(request, "code", null);
    String state = ServletRequestUtils.getStringParameter(request, "state", null);
    get_access_token_url = get_access_token_url.replace("APPID", "*****");
    get_access_token_url = get_access_token_url.replace("SECRET", "*****");
    get_access_token_url = get_access_token_url.replace("CODE", code);

    WeChatAccessToken at = getAccessToken(get_access_token_url);

    String access_token = at.getAccess_token();
    String openid = at.getOpenid();

    logger.info("----- code: 开始 -----" + code);
    logger.info("----- access_token: 开始 -----" + access_token);
    logger.info("----- openid: 开始 -----" + openid);
    logger.info("----- openid: 开始 -----" + at.getExpires_in());
    logger.info("----- openid: 开始 -----" + at.getRefresh_token());
    logger.info("----- openid: 开始 -----" + at.getScope());
    logger.info("----- openid: 开始 -----" + at.getUnionid());

    get_userinfo = get_userinfo.replace("ACCESS_TOKEN", access_token);
    get_userinfo = get_userinfo.replace("OPENID", openid);

    WeChatUserInfo ui = getUserInfo(get_userinfo);
    request.setAttribute("userInfo", ui);
    logger.info("----- /wechat/oauth: 结束 -----");
    return "/h5/activity/demo";
}

public WeChatAccessToken getAccessToken(String url){
    WeChatAccessToken at = HttpClientUtil.simpleHttpCallGet(
            url, null, null, 20000
            , new HttpClientCallBack<WeChatAccessToken>() {
                @Override
                public WeChatAccessToken handleResult(ResultBean res)
                        throws IOException {
                    GetMethod getMethod = (GetMethod) res.getValueObject();
                    WeChatAccessToken accessToken = JSON.parseObject(getMethod.getResponseBody(), WeChatAccessToken.class);
                    return accessToken;
                }
            });
    return at;
}

public WeChatUserInfo getUserInfo(String url){
    WeChatUserInfo userInfo = HttpClientUtil.simpleHttpCallGet(
            url, null, null, 20000
            , new HttpClientCallBack<WeChatUserInfo>() {
                @Override
                public WeChatUserInfo handleResult(ResultBean res)
                        throws IOException {
                    GetMethod getMethod = (GetMethod) res.getValueObject();
                    WeChatUserInfo userInfo = JSON.parseObject(getMethod.getResponseBody(), WeChatUserInfo.class);
                    return userInfo;
                }
            });
    return userInfo;
}

解决方案

微信公众号网页授权获取用户基本信息
微信网页授权获取用户基本信息
微信平台网页授权获取用户基本信息

解决方案二:

 首先引导用户去授权页面:
地址:"https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=redirect_uri&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
用户同意授权后,页面将跳转至 redirect_uri/?code=CODE&state=STATE
[php] view plaincopy在CODE上查看代码片派生到我的代码片
//通过code换取token
$code = $_GET['code'];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=SECRET&code=$code&grant_type=authorization_code";
$json = file_get_contents($url);
$arr = json_decode($json,true);
$token = $arr['access_token'];
$openid = $arr['openid'];
//拿到token后就可以获取用户基本信息了
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid ";
$json = file_get_contents($url);//获取微信用户基本信息
$arr = json_decode($json,true);
$name = $arr['nickname'];//昵称
$imgURL = $arr['headimgurl'];//头像地址
$sex = $arr['sex'];//性别
$province = $arr['province'];//用户个人资料填写的省份
$city= $arr['city'];//普通用户个人资料填写的城市
$country= $arr['country'];//国家,如中国为CN
时间: 2024-12-27 16:20:46

java-微信 网页授权,第一次能拿到用户信息,之后都拿不到的相关文章

微信网页授权openid换用户信息问题

问题描述 微信网页授权openid换用户信息问题 微信公众号网页授权获取用户信息,当通过code换取包含了access_token和openid后,因为之前跳转时scope赋值为snsapi_userinfo,所以继续通过access_token和openid调用网页授权的接口url,但返回的自定义UserInfo对象u1判断不为空,但是却无法获取u1.nickname:我换了一个思维,用微信用户管理获取用户信息的url接口,使用标准方式获取的access_token和之前code返回的open

c#微信开发-微信网页授权(OAuth2.0)

问题描述 微信网页授权(OAuth2.0) 最近在搞有关微信的项目,也是刚接触微信没多久.我在微信订阅号中需要用户访问我们写好的第三方页面,但是页面中需要得到用户的openid做业务逻辑,我们的服务器端用的是senparc的开源方案,想用普通url加?的方式传递openid但是考虑到安全,所以用到了oauth2.0,看到官方给的介绍不是太明白具体操作过程,哪位大神帮忙具体分析一下这个的操作过程.我主要是不明白中间的用code换取accss_token的操作,还有我的第三方页面究竟是如何得到ope

java 微信网页之间的后退问题

问题描述 java 微信网页之间的后退问题

C#实现的微信网页授权操作逻辑封装示例_C#教程

本文实例讲述了C#实现的微信网页授权操作逻辑封装.分享给大家供大家参考,具体如下: 一.微信网页授权登录 前提: 1.已经获取的接口权限,如果是测试账号就已经有权限了 2.配置接口的授权域名 更多说明可以参考方倍工作室:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html 或者官网API:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 步骤: 1.用

微信网页授权(OAuth2.0) PHP 源码简单实现_php实例

提要:  1. 建议对OAuth2.0协议做一个学习.  2. 微信官方文档和微信官网工具要得到充分利用.  比较简单,直接帖源代码了.其中"xxxxxxxxxx"部分,是需要依据自己环境做替换的 /** * OAuth2.0微信授权登录实现 * * @author zzy * @文件名:GetWxUserInfo.php */ // 回调地址 $url = urlencode("http://www.xxxxxxxxx.com/GetWxUserInfo.php"

MVC微信网页授权获取用户OpenId_实用技巧

最近开发微信公众平台,做下记录,以前也开发过,这次开发又给忘了,搞了半天,还是做个笔记为好.  注意框架为MVC 开发微信公众平台.场景为,在模板页中获取用户openid,想要进行验证的页面,集成模板页就可以了.  在_Layout.cshtml中加入如下代码  <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,

PHP实现微信网页授权开发教程_php实例

微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息:在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信息:而微信网页授权可在不需要消息交互,也不需要关注的情况下获取用户的基本信息. 微信网页授权时通过OAuth2.0完成的,整个过程分为三步: 用户授权,获取code: 根据code获取access_token[可通过refresh_token刷新获取较长有效期] 通过access_token和openid获取用户信息 对微信网页授权过程做了简单封

基于CI框架的微信网页授权库示例_php实例

本文实例讲述了基于CI框架的微信网页授权库.分享给大家供大家参考,具体如下: 这里演示建立在CI框架上的微信网页授权功能. 1. 微信小类库,网页授权放置在libraries文件夹 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); Class Weixin { private $appId; private $appSecret; function __construct() { $this->

基于CI框架的微信网页授权库示例

本文实例讲述了基于CI框架的微信网页授权库.分享给大家供大家参考,具体如下: 这里演示建立在CI框架上的微信网页授权功能. 1. 微信小类库,网页授权放置在libraries文件夹 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); Class Weixin { private $appId; private $appSecret; function __construct() { $this->