微信扫描登录(获取扫描人信息) | 学习笔记

简介: 快速学习 微信扫描登录(获取扫描人信息)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot)微信扫描登录(获取扫描人信息)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/667/detail/11463


微信扫描登录(获取扫描人信息)


目录:

一、WxApiController.java 代码演示

二、添加依赖

三、具体操作


一、WxApiController.java 代码演示

@CrossOrigin

@Controller //只是请求地址,不需要返回数据

@RequestMapping("/api/ucenter/wx") public class WxApiController {

//2获取扫描人信息,添加信息

//获取 code 值,临时票据,类似于验证码

@GetMapping(" callback" )

public String callback (String code, String state)

//code 请求微信固定的地址,得到两个值 access_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(

baseAccessTokenUrl,

ConstantWxUtils. WX_ OPEN _APP_ ID,

ConstantWxUtils. WX_ OPEN _APP_ SECRET,

code

);

//请求这个拼接好的地址,得到返回两个值 access_token 和 openid  

//使用 httpclient 发送请求,得到返回结果

String accessTokenInfo = HttpClientUtils. get(accessTokenUrl);

System. out. println(" accessTokenInfo:"+accessTokenInfo);

}catch(Exception e){

//从 accessTokenInfo 字符串获取出来两个值 access_token 和 openid  

//把 accessTokenInfo 字符串转换 map 集合,根据 map 里面 key 获取对应值

//使用 json 转换工具 Gson  

Gson gson = new Gson() ;

HashMap mapAccessToken = gson. fromJson (accessTokenInfo, HashMap. class) ;

Stringaccess_ token = (String) mapAccessToken. get(" access_ _token" ) ;

String openid = (String) mapAccessToken. get (" openid' ) ;


二、添加依赖

<!--httpclient-->

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId></dependency)

<!--commons-io-->

<dependency>

<groupId>commons-ioc/groupId>

<artifactId>conmons-ioc/artifactId>

</dependency>

<!--gson--)

<dependency>

<groupId>com.google.code.gson</groupId>

<artlfactId>gsonc/artifactId)</dependency>

2、创建 httpclient 工具类

放入util 包

HttpClientUtils.java

3、创建回调 controller 方法

在 WxApiControllerjava 中添加如下方法

/**  

*1、获取回调参数

*2、从 redis 中读取 state 进行比对,异常则拒绝调用

*3、向微信的授权服务器发起请求,使用临时票据换取 access token

*4、使用上一步获取的 openid 查询数据库,判断当前用户是否已注册,如果已注册则直接进行登录操作

*5、如果未注册,则使用 openid 和 access token 向微信的资源服务器发起请求,请求获取微信的用户信息

*5.1、将获取到的用户信息存入数据库

*5.2、然后进行登录操作

*

*@param code

*@param state

*@return

*/

@GetMapping("callback")

public String callback(5tring code, String state){

//得到授权临时票据

code System.out.println(code); System.out.println(state);

//从 redis 中将 state 获取出来,和当前传入的 state 作比较

//如果一致则放行,如果不一致则抛出异常:非法访问

//向认证服务器发送请求换取 access_token

String baseAccessTokenUrl="https://api.weixin.ga.com/sns/oauth2faccess token" +

"?appid=%s*+

"&code-%s"+

"&secret=%s"+

"&grant_type-authorization_code";

String accessTokenUrl-String.format(baseAccessTokenUrl,

ConstantPropertiesUtil.WX _OPEN_APP_ID,

ConstantPropertiesUtil.WX_OPEN_APP_SECRET, code);

String result =null; try{

try{

Result=HttpClientUtils.get(accessTokenUr1);

System.out.println("accessToken============"+ result);

}catch (Exception e){

throw new GullException(20001,"获取access_token失败");

}

//解析 json 字符串

Gson gson· new Gson();

HashMap map=gson.fromJson(result,HashMap.class);

String accessToken-(String)map.get("access_token");

String openid-(String)map.get("openid");

//查询数据库当前用用户是否曾经使用过微信登录

Member member- memberService.getByOpenid(openid); if(member ==null){


三、具体操作

1.第一步

扫描之后,执行本地的 callback 方法,在 callback 获取两个值,在跳转时候传递过来

state:原样传递

临时票据

code:类似于手机验证码,随机唯一的值

2.第二步

拿着第一步获取到 code 值,请求微信提供固定的地址,获取到有两个值

(1)access_token: 访问凭证

(2)openid:每个微信唯一标识

3.第三步

拿着第二步获取到两个值 accesstoken 和 openid,再去请求一个微信提供固定地址,最终可以到微信扫描人信息。比如微信昵称,微信头像等等。

用到技术点:

(1) httpclient

(2)json 转换工具

fastjson gson jackson

相关文章
|
小程序 API
微信小程序——授权登录
微信小程序——授权登录
344 0
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
454 0
|
10月前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
3144 12
|
小程序 前端开发 算法
|
移动开发 前端开发 Android开发
开发指南059-App实现微信扫描登录
App是用uniapp开发的,打包为apk,上传到安卓平板中使用
|
小程序 算法 前端开发
微信小程序---授权登录
微信小程序---授权登录
329 0

热门文章

最新文章