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

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

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

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


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


目录:

一、WxApiController.java代码演示

二、具体操作

三、代码讲解


一、WxApiController.java 代码演示

import com.atguigu.educenter.entity.UcenterMember;

import com.atguigu.educenter.service.UcenterMemberService;import com.atauigu,educenter.utils.ConstantWxUtils;

import com.atguigu.educenter.utils.HttpClientUtils;

Importcom.atguigu.servicebase.exceptionhandler.

GuliException: import com.google.gson.Gson;

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype,Controller;

import org. springframework.web.bind.annotation.*;

import java.net.URLEncoder:

import java.util.HashMap:

@CrossOrigin

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

@RequestMapping("/api/ucenter/wx")  

public class WxApiController {

@Autowired

private UcenterMemberService memberService;

@GetMapping("callback)

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

public String callback(String code, String state){

try {

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

//拿着 code 请求微信固定的地址,得到两个值 accsesstoken 和 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 accessTokenUrlF String. format(

baseAccessTokenUrl,

ConstantWxUtils. WX_OPEN_APP_ID

ConstantWxUtils. WX_OPEN_APP_SECRET

code

);

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

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

String accessTokenInfo=HttpClientUtils.get(accessTokenUrl);

//MaccessTokenInfo 字符串获取出来两个值 accsess_token 和 openid

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

//使用 json 转换工具 Gson  

Gson gson=newGson():

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

Stringaccess_token(String)mapAccessToken.get("access_token"):Stringopenid(String)mapAccessToken.get("openid):

//3拿着得到 accsesstoken 和 openid,再去请求微信提供固定的地址,获取到扫描人信意访问微信的资源服务器,获取用户信息

String baseUserInfoUrl="https://api.weixin.qq.com/sns/userinfo"+

”?access_ token=%s" +

"&openid=%s";

//拼接两个参数

String userInfoUrl = String.format(

baseUserInfoUrl, access_token, openid);

);

//发送请求

String userInfo = HttpClientUtils. get (userInfoUrl):

获取返回 userinfo 字符串扫描人信息  

String userInfo= HttpClientUtils.get(userInfoUrl): I

HashMap userInfoMap =gson.fromJson(userInfo, HashMap.class): String nickname =(String)userInfoMap.get("nickname");//呢称

String headimgurl=(String)userInfoMap.get("headimgurl”);//头像

//把扫描人信息添加数据库里面

//判断数据表里而是否存在相同微信信息,根据 openid 利断

UcenterMember member =memberService.getOpenIdMember(openid):  

if(member = null) {//memeber 是空,表没有相同微信数据,进行添加

member = new Ucenterlember)): member.setOpenid(openid):

member. setNickname(nickname) member.setAvatar(headimgurl) memberService.save(member):

//最后:返回首页面

return "redirect:http://localhost:3000";]catch(Exception e) {

throw new GuliException(20001,"登录失败):

//1生成微信扫描二维码

@GetMapping("login")

public String getWxCodeO(

@GetMapping("login")

public String getWxCode (){

//固定地址,后面拼接参数

String url = "https://open. weixin. qq. com/"+

connect/qrconnect?appid= "ConstantWxUtils. WX_ OPEN _APP_ ID"+ &response_ type=code" ;


二、具体操作

1.第一步

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

state:原样传递

临时票据

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

2.第二步

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

(1)access_token: 访问凭证

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

3.第三步

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

用到技术点:

(1) httpclient

(2)json 转换工具

fastjson gson jackson


三、代码讲解

1.拿着得到的 access_token 和 openid

再去请求微信提供固定的地址,获取到扫描人信息,访问微信的资源服务器,获取用户信息

String baseUserInfoUrl =" 'https://api. weixin. qq. com/ 'sns/userinfo" +

"?access_ token-%s" +

" &openid=%s" ;

2.拼接两个参数

String userInfoUrl = String. format(

baseUser InfoUrl,

access_ token,

openid

);

3.发送请求

String userInfo = HttpClientUtils. get (userInfoUrl) ;

4.获取返回 userinfo 字符串扫描人信息

HashMap userInfoMap = gson. fromJson (userInfo, HashMap. class) ;

String nickname = (String) userInfoMap. get (' nickname' );//昵称

String headimgurl = (String) userInfoMap. get (' 'headimgurl' );//头像

5.把扫码人信息添加到数据库里面

6.判断数据表里面是否存在相同微信信息,根据 openid 判断

UcenterMember member = memberService. get0penIdMember (openid);

if(member = null) {// memeber 是空,表没有相同我微信数据,进行添加

member = newUcenterMember 0;

member. set0penid(openid) ;

member. setNickname (nickname) ;

member. setAvatar (headimgur1) ;

memberService. save (member) ;

}

根据 openid 判断

@0verride

public UcenterMember get0penIdMember (String openid){

QueryWrapper wrapper = new QueryWrapper<>();

wrapper. eq( column:" openid" , openid) ;

UcenterMember member = baseMapper. select0ne (wrapper) ;

return member ;

7.最后:返回首页面

return” redirect :http://localhost:3000" ;

} catch(Exception e) {

throw new GuliException(20001,"登录失败”) ;

相关文章
|
1月前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
410 12
|
4月前
|
小程序 前端开发 算法
|
5月前
|
移动开发 前端开发 Android开发
开发指南059-App实现微信扫描登录
App是用uniapp开发的,打包为apk,上传到安卓平板中使用
|
5月前
|
小程序 JavaScript
微信小程序之input组件及其获取用户输入信息
微信小程序之input组件及其获取用户输入信息
110 1
|
5月前
|
小程序 算法 前端开发
微信小程序---授权登录
微信小程序---授权登录
160 0
|
7月前
|
存储 小程序 JavaScript
|
1月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
15天前
|
人工智能 自然语言处理 小程序
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
技术小白如何利用DeepSeek半小时开发微信小程序?
|
8天前
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
52 11
|
1月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
2972 15
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程

热门文章

最新文章