准备工作
网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者账号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。
1、在微信开放平台里面获取到登录连接(获取到对应的code值)
<a href="https://open.weixin.qq.com/connect/qrconnect? appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_login&state=1#wechat_redirect">
<i class="am-icon-weixin am-icon-sm"></i><span>微信登录</span>
</a>
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
redirect_uri | 是 | 请使用urlEncode对链接进行处理 |
response_type | 是 | 填code |
scope | 是 | 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login |
appid和redirect_uri对应的值需要你在微信开放平台里面注册开发者账号后并拥有一个已审核通过的网站应用 才会有对应的appid和redirect_uri
2、点击微信登录会弹出一个二维码 通过微信扫一扫进行登录 登录完成后他会通过你写的redirect_uri(回调地址) 调转到相应的页面上并会返回一个code值以及state值(地址栏中)
3、前端截取code值再将code值发送请求到后端 后端通过下面链接(需要传递code值、appid、secret)来获取到对应的token值以及openId
//获取到code码 发送请求获取到token 令牌
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
String newUrl = String.format(url, APPID, SECRET, code);
String tokenUrl = HttpUtil.get(newUrl);
JSONObject jsonObject = JSONObject.parseObject(tokenUrl);
String token = jsonObject.getString("access_token");
String openId = jsonObject.getString("openid");
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识,在微信开放平台提交应用审核通过后获得 |
secret | 是 | 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 |
code | 是 | 填写第一步获取的code参数 |
grant_type | 是 | 填authorization_code |
4、再根据所得到的token以及openId 通过一下链接 能够获取到对应的微信用户信息 并转换成Java的对象
//获取微信用户信息
//获取到token 在获取对应的用户信息
String WX = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";
String WXUrl = String.format(WX, token, openId);
String WXuser = HttpUtil.get(WXUrl);
WXUserDto wxObj = JSONObject.parseObject(WXuser).toJavaObject(WXUserDto.class);
获取到微信用户信息(这里只获取了openId用户唯一标识符,nickname微信用户名,sex男女,headimgUrl 微信用户头像的地址 以及uinonid)
存入数据库完成!