Topppppp1啊啊啊,好的兄弟们ovo,感谢观看我的Day1内容
话不多说~
乘客端登录:需求说明~
乘客端登录:微信小程序登录流程~(这个是官方图,下面有简化版)![](https://i-blog.csdnimg.cn/direct/7723784e6fdf4204b3439dc96b8a613f.png)
在此:(大家要清楚啊,我们的代码就是根据这个写的)
这个是我们的小程序id和密钥,在微信开发者工具网页里找~
乘客端登录:微信小程序登录接口
1.准备工作
项目工程结构
宝子们,你们觉得看到这个我们应该做什么呢?
答案:
首先service-customer创建接口,在service-client里面定义接口,在web乘客端远程调用接口,然后完成微信小程序的登录接口~宝子们跟你们想的一样吧?
2.引入微信工具包相关依赖
在service-customer里面引入依赖
3.修改Nacos配置中心配置文件
在项目配置文件中进行修改bootstrap.properties
这里面那个192.168.6.129啊,因为装到了虚拟机里面,所以要改成自己的ip地址啊!!!
这个文件在Nacos配置中心中:(要打开这个网站进行修改呀,比较复杂,在b站视频里的P26详细交大家修改)
4.创建配置类,读取配置文件信息
在service-customer创建包config,创建类,读取配置文件内容
这个wx.miniapp和appId和secret是在配置文件中规定的,不能乱写哦~
5.创建微信包对象
给我看好啊,很简单的~
乘客端登录:获取登录用户信息接口
在service-controller里面写代码 获取信息
这个是这样的,在controller里面得到我们的code值,拿code调方法最终返回用户ID
@Slf4j
@RestController
@RequestMapping("/customer/info")
@SuppressWarnings({"unchecked", "rawtypes"})
public class CustomerInfoController {
@Autowired
private CustomerInfoService customerInfoService;
//微信小程序登录接口
@Operation(summary = "小程序授权登录")
@GetMapping("/login/{code}")
public Result<Long> login(@PathVariable String code) {
return Result.ok(customerInfoService.login(code));
}
service-impl-CustomerInfoServiceImpl里
这个是这样的,根据code得到我在微信小程序中的唯一标识openid,拿着openid查数据库,如果不存在---表示第一次----加到表里,记录登录日志,返回登录id~
@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, CustomerInfo> implements CustomerInfoService {
@Autowired
private WxMaService wxMaService;
@Autowired
private CustomerInfoMapper customerInfoMapper;
@Autowired
private CustomerLoginLogMapper customerLoginLogMapper;
//微信小程序登录接口
@Override
public Long login(String code) {
//1 获取code值,使用微信工具包对象,获取微信唯一标识openid
String openid = null;
try {
WxMaJscode2SessionResult sessionInfo =
wxMaService.getUserService().getSessionInfo(code);
openid = sessionInfo.getOpenid();
} catch (WxErrorException e) {
throw new RuntimeException(e);
}
//2 根据openid查询数据库表,判断是否第一次登录
//如果openid不存在返回null,如果存在返回一条记录
//select * from customer_info ci where ci.wx_open_id = ''
LambdaQueryWrapper<CustomerInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CustomerInfo::getWxOpenId,openid);
CustomerInfo customerInfo = customerInfoMapper.selectOne(wrapper);
//3 如果第一次登录,添加信息到用户表
if(customerInfo == null) {
customerInfo = new CustomerInfo();
customerInfo.setNickname(String.valueOf(System.currentTimeMillis()));
customerInfo.setAvatarUrl("https://oss.aliyuncs.com/aliyun_id_photo_bucket/default_handsome.jpg");
customerInfo.setWxOpenId(openid);
customerInfoMapper.insert(customerInfo);
}
//4 记录登录日志信息
CustomerLoginLog customerLoginLog = new CustomerLoginLog();
customerLoginLog.setCustomerId(customerInfo.getId());
customerLoginLog.setMsg("小程序登录");
customerLoginLogMapper.insert(customerLoginLog);
//5 返回用户id
return customerInfo.getId();
}