其他分享
首页 > 其他分享> > 微博开放平台 auth2.0

微博开放平台 auth2.0

作者:互联网

微博开放平台 https://open.weibo.com/
创建应用

 

 

 

 

 

 

 

 然后根据code信息 我们可以去授权服务器获取对应的token信息  获取token信息只支持post 方式提交  我们可以使用postman 方式提交

https://api.weibo.com/oauth2/access_token?client_id=1093598037&client_secret=1085c8de04dee49e9bb110eaf2d3cf62&grant_type=authorization_code&redirect_uri=http://msb.auth.com/success.html&code=59d62e59e5ead5a4ea89c6f9cf212568

 

 获取到了token信息后我们就可以去资源服务器获取资源信息

 

 我们可以调用userShow

 

 

 根据之前获取的access_token 和 uid 来获取对应的user信息

 

 

 

 

 

 

 

 在后台服务获取code  并获取对应的token信息

 

@Controller
public class OAuth2Controller {
    
    @RequestMapping("/oauth/weibo/success")
    public String weiboOAuth(@RequestParam("code") String code) throws Exception {
        /*微博会回调接口 需要传入对应的参数  token*/
        Map<String,String> body = new HashMap<>();
        body.put("client_id","1093598037");
        body.put("client_secret","1085c8de04dee49e9bb110eaf2d3cf62");
        body.put("grant_type","authorization_code");
        body.put("redirect_uri","http://msb.auth.com/oauth/weibo/success");
        body.put("code",code);
        //根据code 获取对应的token信息
        HttpResponse post = HttpUtils.doPost("https://api.weibo.com"
                , "/oauth2/access_token"
                , "post"
                , new HashMap<>()
                , null
                , body
        );
        int statusCode = post.getStatusLine().getStatusCode();
        if(statusCode != 200){
            // 说明获取Token失败,就调回到登录页面
            return "redirect:http://msb.auth.com/login.html";
        }
        // 说明获取Token信息成功
        
        String json = EntityUtils.toString(post.getEntity());
        SocialUser socialUser = JSON.parseObject(json, SocialUser.class);
        // 注册成功就需要调整到商城的首页
        return "redirect:http://msb.mall.com/home.html";
        
        
    }
}
这里的SocialUser  就是为了接收微博传过来的参数格式而创建的类
@Data public class SocialUser { private String accessToken;//token 信息 private long remindIn; private long expiresIn;//过期时间 private String uid;//用户识别编号 private boolean isRealName; }

此时我们需要远程调用 member服务去后端查看  是否是第一次登陆  如果是 需要注册 将微博返回的信息和注册信息一并存入数据库中

 

 

 

 

 

@Controller
public class OAuth2Controller {
    
    @Autowired
    private MemberFeginService memberFeginServicel;
    
    @RequestMapping("/oauth/weibo/success")
    public String weiboOAuth(@RequestParam("code") String code) throws Exception {
        /*微博会回调接口 需要传入对应的参数  token*/
        Map<String,String> body = new HashMap<>();
        body.put("client_id","1093598037");
        body.put("client_secret","1085c8de04dee49e9bb110eaf2d3cf62");
        body.put("grant_type","authorization_code");
        body.put("redirect_uri","http://msb.auth.com/oauth/weibo/success");
        body.put("code",code);
        //根据code 获取对应的token信息
        HttpResponse post = HttpUtils.doPost("https://api.weibo.com"
                , "/oauth2/access_token"
                , "post"
                , new HashMap<>()
                , null
                , body
        );
        int statusCode = post.getStatusLine().getStatusCode();
        if(statusCode != 200){
            // 说明获取Token失败,就调回到登录页面
            return "redirect:http://msb.auth.com/login.html";
        }
        // 说明获取Token信息成功
        
        String json = EntityUtils.toString(post.getEntity());
        SocialUser socialUser = JSON.parseObject(json, SocialUser.class);
        R r = memberFeginServicel.socialLogin(socialUser);
        if(r.getCode()!=0){
            //表示登陆错误
            return "redirect:http://msb.auth.com/login.html";
        }
        String entityJson = (String)r.get("entity");
        System.out.println("------------->"+entityJson);
        // 注册成功就需要调整到商城的首页
        return "redirect:http://msb.mall.com";
        
        
    }
}
@Data
public class SocialUser {
    private String accessToken;//token 信息
    private long remindIn;
    private long expiresIn;//过期时间
    private String uid;//用户识别编号
    private boolean isRealName;
}

 

 

    @RequestMapping("/oauth2/login")
    public R socialLogin(@RequestBody SocialUser vo){
        System.out.println(vo);
        MemberEntity entity=memberService.login(vo);
        return R.ok().put("entity", JSON.toJSONString(entity));
    }
  @Override
    public MemberEntity login(SocialUser vo) {
       
        // 如果不是第一次社交登陆 登陆功能
        MemberEntity memberEntity = this.getOne(new QueryWrapper<MemberEntity>().eq("social_uid", vo.getUid()));
        if(memberEntity!=null){
            //说明 当前用户已经注册过了 更新token和过期时间
            MemberEntity entity=new MemberEntity();
            entity.setId(memberEntity.getId());
            entity.setAccessToken(vo.getAccessToken());
            entity.setExpiresIn(vo.getExpiresIn());
            this.updateById(entity);
            //在返回的登陆用户信息中我们同步的返回更新后的token和过期时间
             memberEntity.setAccessToken(vo.getAccessToken());
             memberEntity.setExpiresIn(vo.getExpiresIn());
            return memberEntity;
        }
        
        //如果该用户是第一次社交登陆  那么需要注册  
        MemberEntity entity=new MemberEntity();
        entity.setAccessToken(vo.getAccessToken());
        entity.setExpiresIn(vo.getExpiresIn());
        entity.setUid(vo.getUid());
        //通过token 调用微博开放接口来获取用户的基本信息
        try {
            Map<String,String> querys = new HashMap<>();
            querys.put("access_token",vo.getAccessToken());
            querys.put("uid",vo.getUid());
            HttpResponse response = HttpUtils.doGet("https://api.weibo.com"
                    , "/2/users/show.json"
                    , "get"
                    , new HashMap<>()
                    , querys
            );
            if(response.getStatusLine().getStatusCode() == 200){
                //将对象装换为字符串
                String json = EntityUtils.toString(response.getEntity());
                System.out.println("将对象装换为字符串"+json);
                //将字符串装换为对象
                JSONObject jsonObject = JSON.parseObject(json);
                System.out.println("将字符串装换为对象"+jsonObject);
                String nickName = jsonObject.getString("screen_name");
                String gender = jsonObject.getString("gender");
                entity.setNickname(nickName);
                entity.setGender("m".equals(gender)?1:0);
            }
        }catch (Exception e){
    
        }
        // 注册用户信息
        this.save(entity);
        return entity;
    }

 

 

标签:body,code,String,auth2.0,token,entity,微博,vo,开放平台
来源: https://www.cnblogs.com/Lcch/p/16366479.html