一.步骤分析
第一步:扫描之后,执行本地的callback方法,在callback获取到state(原样传递)值和code(类似于手机验证码,随机生成且唯一的)值,在跳转时传递过来
#第二步:拿着第一步获取到的code值,请求微信提供固定的地址,获取到access_token(访问凭证)和openid(每个微信的唯一标识)
第三步:那这第二部获取到的两个值access_token和openid,再去请求一个微信提供的固定地址,最终可以获取到扫描人的信息,如:昵称,头像等
第四步:判断数据库中是否有扫描人的信息,有:返回首页面;无:添加到数据库中
二.用到的技术点
(1)httpclient:不需要浏览器也可以发送请求,得到结果
(2)json转换工具:在这里用到的是gson
(3)OAuth2解决方案:令牌机制,按照一定规则生成字符串,字符串包含用户信息
三.步骤图
取到的一些相关数据
获取access_token值和openid值
获取用户信息
四.具体代码如下
public String callback(String code,String state){
try{
//1.获取code值,临时票据,(随机且唯一生成的,类似于验证码)
//2.拿着code请求微信固定地址,得到两个值 accsess_token 和 openid
String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
"?appid=%s" +
"&secret=%s" +
"&code=%s" +
"&grant_type=authorization_code";
//拼接三个参数 id 密钥 code值
String accessTokenUrl = String.format(