Java 微信PC扫码授权登录

一,介绍

现在有很多微信项目开发,希望在登录的时候,自动使用微信号登录,在这篇文章进行介绍一下。

二、微信官网-微信网页授权

  1. 引导用户进入授权页面同意授权,获取code
  2. 通过code换取网页授权access_token(与基础支持中的access_token不同)
  3. 如果需要,开发者可以刷新网页授权access_token,避免过期
  4. 通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

三、开发思路

  1. 获取code
  2. 通过code获取网页授权access_token
  3. 拉取用户信息

四、配置类参数封装

把所有的Api和微信登录用到的参数(下面是需要准备的参数)封装成配置类,方便使用,

wxopen.appid=wxa3915224f507b2
wxopen.appsecret=82380d12143533d86b0b775123b9
wxopen.redirect_url=http://xxxxx.cn/api/v1/wechat/user/callback

第一步:用户同意授权,获取code

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
参数 是否必须 说明
appid 应用唯一标识,审核通过获得
redirect_uri 回调地址,用户扫码完成之后 微信会将code作为参数传到这个地址上(注意这里回调地址需要urlEncode处理)
response_type 填code
scope 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login
state

用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

用户扫码访问拼装好的二维码链接并授权后,微信平台会回调 我们在上面设置的回调地址并且会携带code临时凭证,接下来我们就用code去获取access_token

/**
 * 拼装微信扫一扫登录Url
 * @return
 */
@GetMapping("/login_url")
public JsonData loginUrl(
@RequestParam(value = "access_page", required = true) String accessPage) throws UnsupportedEncodingException {
        String redirectUrl = weChatConfig.getOpenRedirectUrl(); //获取开放平台重定向地址
        String callbackUrl = URLEncoder.encode(redirectUrl, "GBK"); //进行编码
        String qrcodeUrl = String.format(weChatConfig.getOpenQrCodeUrl(), weChatConfig.getOpenAppid(), callbackUrl, accessPage);
        return JsonData.buildSuccess(qrcodeUrl);
}

第二步:code换取access_token

第一步用户扫码授权完成后,微信会回调我们设置的回调地址(redirect_uri)并且会携带code值,我们拿到code就可以搞事情了

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数

是否必须 说明
appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
secret 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code 填写第一步获取的code参数
grant_type 填authorization_code

第三步:获取用户信息

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参数 是否必须 说明
access_token 调用凭证
openid 普通用户的标识,对当前开发者帐号唯一
lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN

猜你喜欢

转载自blog.csdn.net/Damao1183297959/article/details/108833824