欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java实现第三方微信登录

程序员文章站 2023-12-23 09:41:10
...

使用微信进行第三方登录总共分为三步;

准备:在微信开发平台,创建网站应用
appId值,appsecret值和回调域名

1.获取code

  • 1). 首先展示二维码,让用户进行扫描授权
    两种方式(选一):
    • 直接使用a标签进行链接二维码(方便)
      • 我们要填写的信息有:
        • appId(微信开发平台创建应用后提供)
        • redirect_uri(回调域名,必须是开发平台的创建应用的回调域名之下)
        • state(唯一凭证,随便填)
//请求路径,需更改
<a href="https://open.weixin.qq.com/connect/qrconnect?appid=应用ID&redirect_uri=回调地址&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"
>微信登录</a>
  • 1
  • 2
  • 3
  • 跳转自定义页面进行二维码展示
    定义一个a标签跳转到自定义的页面,在页面导入js文件
    • 我们要填写的信息有:
      • id(二维码展示的容器)
      • appId(微信开发平台创建应用后提供)
      • redirect_uri(回调域名,必须是开发平台的创建应用的回调域名之下)
      • state(唯一凭证,随便填)
      • style(二维码样式,已填)
      • href(样式,不填)
<script type="text/javascript" src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
  • 1
<body>
	<div id="login_container"></div>
	<script type="text/javascript">
	    var obj = new WxLogin({
	        self_redirect:true,
	        id:"login_container",
	        appid: "应用ID",
	        scope: "snsapi_login",
	        redirect_uri: "回调地址",
	        state: "STATE",
	        style: "white",
	        href: ""
	    });
	</script>
</body>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.在回调中根据code获取token和openid并获取微信用户信息

  • 1). 准备java发送http请求的工具类
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.7</version>
        </dependency>
        //阿里的json转换工具
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.4</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
public static String get(String uri){
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet get = new HttpGet(uri);
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(get);
            int statusCode = response.getStatusLine().getStatusCode();
            if(statusCode==200){
                HttpEntity entity = response.getEntity();
                String result = EntityUtils.toString(entity,"UTF-8");
                return result;
            }else {
                return null;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 2). 准备url请求
//获取token和openid请求路径,需更改其APPID和**,其他的代码中动态修改
    public String GETTOKEN = "" +
            "https://api.weixin.qq.com/sns/oauth2/access_token?appid=应用ID&secret=应用**&code=CODE&grant_type=authorization_code";

//用户信息请求路径,代码中动态修改
public String USERINFO = “” +
“https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID”

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 3). 最终集成的回调后台代码:
@RequestMapping("/callBack")
    public ModelAndView callBack(String code, String state){
        //回调获得code,通过用户授权的code去获取微信令牌
        String token = HttpClientUtil.get(GETTOKEN.replaceAll("CODE", code));
        Map map = JSON.parseObject(token);
        //获取到了关键的令牌和openid后,
        //就可以正式开始查询微信用户的信息,完成我们要做的微信绑定
        String access_token = (String) map.get("access_token");
        String openid = (String) map.get("openid");
        String userInfo = HttpClientUtil.get(USERINFO.replaceAll("TOKEN", access_token).replaceAll("OPENID", openid));
        Map info = JSON.parseObject(userInfo);
        //返回一个登录成功后的页面,携带微信用户信息
        return new ModelAndView("personal","userInfo",info);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 4). 登录成功后的页面代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    微信名称:${userInfo.nickname}
    微信头像:<img src="${userInfo.headimgurl}"/>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

最后在页面看到微信登录成功后的信息
java实现第三方微信登录

这样我们就得到了微信登录用户的个人信息,完成微信第三方登录!

项目Demo地址:https://github.com/wl1006/WeChat-Login-Demo

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
                                            <div class="more-toolbox">
            <div class="left-toolbox">
                <ul class="toolbox-list">
                    
                    <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">点赞</span>
                    <span class="count">3</span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打赏开始-->
                                            <!--打赏结束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章举报</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/qq_44575680">
                <img src="https://profile.csdnimg.cn/C/4/E/3_qq_44575680" class="avatar_pic" username="qq_44575680">
                                        <img src="https://g.csdnimg.cn/static/user-reg-year/2x/1.png" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="https://blog.csdn.net/qq_44575680" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">Dragon_King_admin</a></span>
                                        </div>
                <div class="text"><span>发布了29 篇原创文章</span> · <span>获赞 25</span> · <span>访问量 1万+</span></div>
            </div>
                            <div class="right-message">
                                        <a href="https://im.csdn.net/im/main.html?userName=qq_44575680" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                    </a>
                                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                </div>
                        </div>
                </div>
相关标签: 6springboot

上一篇:

下一篇: