微信小程序的授权登录-Java 后端 (Spring boot)

本文详细介绍了微信小程序的登录流程,包括前端如何获取code和用户信息,后端如何使用这些信息获取openid和session_key,以及如何解密用户敏感数据。同时,文章提到了用户数据在数据库中的存储结构,并提供了部分代码示例,涉及HttpClient工具类和WechatService的相关实现。最后,讨论了token的管理和有效期问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信开发文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

1. 前提

  • 一个可以测试的微信小程序
  • 此微信小程序的APPID和APPscret(至开发者后台获取)

2. 开发流程

从时序图我们可以了解到流程大致分为两步:

  • 小程序端获取code后传给Java后台
  • Java后台获取code后向微信后台接口获取open_id

2.1 小程序端(前端要做的)


在微信小程序的前端调用wx.login()获取一个code,这个code就像是我们去微信后台服务器获取用户信息的一个钥匙,微信通过获取这个code的过程给用户一个选择是否授权的选择,如果用户选择了授权就会返回一个code。这个code是一次性的,也是有时限的。

这里简单的做一个说明,首先由小程序端调用wx.login()去获取code,然后,再通过wx.getUserInfo()去获取用户信息(这里请求login和getUserInfo是一起的,把这两次请求的数据合并发给服务端的login接口),通过请求,把:

1.code //临时登入凭证
// 如果不同意获取用户信息,则下面四个参数获取不到
2.rawData //用户非敏感信息,头像和昵称之类的
3.signature //签名
4.encryteDate //用户敏感信息,需要解密,(包含unionID)
5.iv //解密算法的向量

给到服务端,服务端根据 appid+secret+js_code+grant_type

去请求,获取到session_key和openid(这里无法获取unionID),通过session_key,iv来解密encrypteDate获取用户敏感信息和unionID,把用户信息保存到数据库。然后,我们把sesssoin_key和openid保存下来,与token(自定义登入状态)来进行关联,最后把小程序需要的数据返回给小程序端,以后就通过token来维护用户登入状态。
用户表结构设计:

CREATE TABLE `wechat_user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `token` varchar(100) NOT NULL COMMENT 'token',
 `nickname` varchar(100) DEFAULT NULL COMMENT '用户昵称',
 `avatar_url` varchar(500) DEFAULT NULL COMMENT '用户头像',
 `gender` int(11) DEFAULT NULL COMMENT '性别  0-未知、1-男性、2-女性',
 `country` varchar(100) DEFAULT NULL COMMENT '所在国家',
 `province` varchar(100) DEFAULT NULL COMMENT '省份',
 `city` varchar(100) DEFAULT NULL COMMENT '城市',
 `mobile` varchar(100) DEFAULT NULL COMMENT '手机号码',
 `open_id` varchar(100) NOT NULL COMMENT '小程序openId',
 `union_id` varchar(100) DEFAULT '' COMMENT '小程序unionId',
 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
 `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 `deleted_at` timestamp NULL DEFAULT NULL COMMENT '删除时间',
 PRIMARY KEY (`id`),
 KEY `idx_open_id` (`open_id`),
 KEY `idx_union_id` (`union_id`),
 KEY `idx_mobile` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='小程序用户表';

具体代码

说明,如果@Getter报错,那就删掉,自己加Getter,Set

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值