苍穹外卖--微信登录功能实现&用户端登录校验添加

This commit is contained in:
2025-11-18 15:31:50 +08:00
parent 39b0669c35
commit ccf1aeb7af
9 changed files with 229 additions and 3 deletions

View File

@@ -0,0 +1,64 @@
package com.sky.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sky.constant.MessageConstant;
import com.sky.dto.UserLoginDTO;
import com.sky.entity.User;
import com.sky.exception.LoginFailedException;
import com.sky.mapper.UserMapper;
import com.sky.properties.WeChatProperties;
import com.sky.service.UserService;
import com.sky.utils.HttpClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private WeChatProperties weChatProperties;
@Autowired
private UserMapper userMapper;
/**
* 微信登录功能
* @param userLoginDTO
* @return
*/
@Override
public User wxLogin(UserLoginDTO userLoginDTO) {
//1.调用微信接口服务获取微信用户唯一标识openID
String openId = getOpenId(userLoginDTO);
//2.判断openID是否为空
if (openId == null) {
throw new LoginFailedException(MessageConstant.LOGIN_FAILED);
}
//3.判断当前用户是否是新用户
User user = userMapper.getByOpenId(openId);
//4.如果是新用户(数据库中查询不到数据),自动完成注册
if (user == null) {
user = User.builder().openid(openId).createTime(LocalDateTime.now()).build();
userMapper.insert(user);
}
//5.返回登录对象User
return user;
}
//使用httpclient调用微信接口服务
private String getOpenId(UserLoginDTO userLoginDTO) {
Map<String, String> map = new HashMap<>();
map.put("appid",weChatProperties.getAppid());
map.put("secret",weChatProperties.getSecret());
map.put("js_code", userLoginDTO.getCode());
map.put("grant_type"," authorization_code");
String json = HttpClientUtil.doGet("https://api.weixin.qq.com/sns/jscode2session", map);
JSONObject jsonObject = JSON.parseObject(json);
String openid = jsonObject.getString("openid");
return openid;
}
}