服务器之家

服务器之家 > 正文

java实现 微博登录、微信登录、qq登录实现代码

时间:2020-06-22 12:44     来源/作者:51CTO

微信,微博,QQ,这是现在目前用的最多的手机 APP,我们做产品哪能不跟他们不沾边,对于登录,我想谁也不想要多少个帐号密码,根本记不住!

为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生

java实现 微博登录、微信登录、qq登录实现代码

1、微信

 1) 微信登录也是最坑人的,需要花300大洋成为开发者账户,没办法谁让微信用户群体大呢所以也就只好认了;然后登录网站后台需要创建网站应用,填写授权回调域(登录网站的域名)只填写域名即可

申请地址: https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN

 2)查看微信提供的接口,写java代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public void wx() {
 try {
  response.sendRedirect("https://open.weixin.qq.com/connect/qrconnect?appid="
   + ShareLoginDict.WEIXINKEY.getState()
   + "&redirect_uri="
   + URLEncoder.encode(ShareLoginDict.WEIXINURL.getState())
   + "&response_type=code&scope=snsapi_login&state=66666#wechat_redirect");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
 
@Override
 public Result userwx(String return_code) {
 Result result = new Result();
 Map<String, Object> token = (Map<String, Object>) WeiXinAPI
  .getToken(return_code);
 if (token != null && token.get("access_token") != null) {
  Map<String, Object> user = (Map<String, Object>) WeiXinAPI
   .getWxUser(token.get("access_token").toString(),
    token.get("openid").toString());
  if (user != null) {
  result.addModel("openid", user.get("openid"));
  result.addModel("nickname", user.get("nickname"));
  result.addModel("headimgurl", user.get("headimgurl"));
  result.addModel("data", "data_success");
  }else{
  result.addModel("data", "data_null");
  }
 }else{
  result.addModel("data", "data_null");
 }
 return result;
 }

当用户通过微信登录时,调用微信接口获取用户接口返回微信端的openid,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。

2、qq登录

 1)qq互联创建应用

接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。

申请appid和appkey的用途

 appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。

appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。

申请地址: http://connect.qq.com/intro/login/

 2)查看QQ提供的接口,写java代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public void qq() {
 try {
  response.sendRedirect("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
   + ShareLoginDict.QQKEY.getState()
   + "&redirect_uri="
   + ShareLoginDict.QQURL.getState() + "&scope=get_user_info");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
 
@Override
 public Result userqq(String return_code) {
 Result result = new Result();
 Map<String, Object> token = (Map<String, Object>) QQAPI
  .getToken(return_code);
 if (token != null && token.get("access_token") != null) {
  Map<String, Object> tokenme = (Map<String, Object>) QQAPI
   .getTokenMeOpenId(token.get("access_token").toString());
  if (tokenme != null && tokenme.get("openid") != null) {
  Map<String, Object> user = (Map<String, Object>) QQAPI
   .getQqUser(token.get("access_token").toString(),
    tokenme.get("openid").toString());
  if (user != null) {
   result.addModel("openid", tokenme.get("openid"));
   result.addModel("nickname", user.get("nickname"));
   result.addModel("figureurl", user.get("figureurl"));
   result.addModel("data", "data_success");
  }else{
   result.addModel("data", "data_null");
  }
  }else{
  result.addModel("data", "data_null");
  }
 
 }else{
  result.addModel("data", "data_null");
 }
 return result;
 }

当用户通过QQ登录时,调用QQ接口获取用户接口返回QQ端的openid,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。

3 微博登录

 1)微博创建应用

  申请地址:http://open.weibo.com/authentication

 2)查看微博提供的接口,写java代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public void wb() {
 try {
  response.sendRedirect("https://api.weibo.com/oauth2/authorize?client_id="
   + ShareLoginDict.WEIBOKEY.getState()
   + "&redirect_uri="
   + ShareLoginDict.WEIBOURL.getState()
   + "&response_type=code");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
 
@Override
 public Result userwb(String return_url, String return_code) {
 Result result = new Result();
 Map<String, Object> token = (Map<String, Object>) WeiBoAPI.getToken(
  return_url, return_code);
 if (token != null && token.get("access_token") != null) {
  Map<String, Object> user = (Map<String, Object>) WeiBoAPI
   .getWbUser(token.get("access_token").toString(),
    token.get("uid").toString());
  if (user != null) {
  result.addModel("name", user.get("screen_name"));
  result.addModel("pic", user.get("avatar_large"));
  result.addModel("idstr", user.get("idstr"));
  result.addModel("data", "data_success");
  }else{
  result.addModel("data", "data_null");
  }
 }else{
  result.addModel("data", "data_null");
 }
 return result;
 }

当用户通过微博登录时,调用微博接口获取用户接口返回微博端的idstr,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部