苍穹外卖--微信登录功能实现&用户端登录校验添加
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user