Browse Source

增加小程序通过openID登陆

master
luyan 2 years ago
parent
commit
b51a254cdd
  1. 24
      epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
  2. 7
      epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java
  3. 56
      epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java

24
epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java

@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Description 第三方-居民端政府端登陆服务
* @author sun
* @Description 第三方-居民端政府端登陆服务
*/
@RestController
@RequestMapping("thirdlogin")
@ -36,6 +36,16 @@ public class ThirdLoginController {
return new Result<UserTokenResultDTO>().ok(thirdLoginService.resiLogin(formDTO));
}
/**
* 根据OpenID登陆
* @param openId
* @return
*/
@PostMapping("resiLoginByOpenId/{openId}")
public Result<UserTokenResultDTO> resiLoginByOpenId(@PathVariable String openId) {
return new Result<UserTokenResultDTO>().ok(thirdLoginService.resiLoginByOpenId(openId));
}
/**
* @param formDTO
* @return
@ -156,6 +166,7 @@ public class ThirdLoginController {
* 2通过12拿到手机号之后,根据mobile+customerId去user_base_info表找userId
* 是否注册居民register_relation
* 3没有则生成useruser_Base_info表记录
*
* @param formDTO
* @return
*/
@ -170,6 +181,7 @@ public class ThirdLoginController {
* 企业简历内部应用授权给第三方
* 可参考文档 获取第三方应用授权企业的accessToken https://open.dingtalk.com/document/orgapp-server/obtain-the-access_token-of-the-authorized-enterprise
* https://open.dingtalk.com/document/orgapp-server/enterprise-internal-application-logon-free
*
* @param formDTO
* @return
*/
@ -183,22 +195,21 @@ public class ThirdLoginController {
* 企业内部应用开发不授权了 文档地址https://open.dingtalk.com/document/orgapp-server/enterprise-internal-application-logon-free
* https://open.dingtalk.com/document/orgapp-server/enterprise-internal-application-logon-free
* 建议用户信息保存在前端缓存中dd.setStorage或者cookie中避免每次进入应用都调用钉钉接口进行免登
*
* <p>
* 获取免登授权码
* 小程序免登
* 微应用免登
* 获取AccessToken
* 调用接口获取access_token详情请参考获取企业内部应用的access_token
*
* <p>
* 获取userid
* 调用接口获取用户的userid详情请参考通过免登码获取用户信息
*
* <p>
* 获取用户详情
* 调用接口获取用户详细信息详情请参考根据userId获取用户详情
*
* @param formDTO
* @return
* 目前烟台用的这个
* @return 目前烟台用的这个
*/
@PostMapping("resilogin-internalding")
public Result<ResiDingAppLoginResDTO> resiLoginInternalDing(@RequestBody DingAppLoginMdFormDTO formDTO) {
@ -231,6 +242,7 @@ public class ThirdLoginController {
/**
* 山东通sso登录
*
* @author wxz
* @date 2022/11/3 10:19
* * @param authCode

7
epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java

@ -135,4 +135,11 @@ public interface ThirdLoginService {
UserTokenResultDTO sdtSSOLogin(String authCode, String customerId);
void sendLoginEvent(String userId, String appId, String fromApp, String fromClient,String messageType);
/**
* 小程序根据用户的openID登陆
* @param openId
* @return
*/
UserTokenResultDTO resiLoginByOpenId(String openId);
}

56
epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java

@ -53,8 +53,6 @@ import com.taobao.dingtalk.vo.result.AccessTokenResult;
import com.taobao.dingtalk.vo.result.UserBaseInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -73,7 +71,6 @@ import java.util.stream.Collectors;
@Service
public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResolver {
private static final Logger logger = LoggerFactory.getLogger(ThirdLoginServiceImpl.class);
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
@ -99,6 +96,17 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
@Autowired
private ThirdOpenFeignClient thirdOpenFeignClient;
/**
* 工作端:gov居民端:resi运营端:oper
*/
private static final String APP = "resi";
private static final String APP_ID = "wx07674c23af51b521";
private static final String SESSION_KEY = "a2fd0d29b007cbbcf8c8dda8c693d99b";
private static final String CLIENT = "wxmp";
/**
* @param formDTO
* @return
@ -137,6 +145,33 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
return userTokenResultDTO;
}
@Override
public UserTokenResultDTO resiLoginByOpenId(String openId) {
// 1、确定用户是否注册,如果没有,直接注册
WxUserFormDTO wxUser = new WxUserFormDTO();
wxUser.setApp(APP);
UserWechatDTO wechatDTO = new UserWechatDTO();
wechatDTO.setWxOpenId(openId);
wxUser.setWechatDTO(wechatDTO);
UserDTO userDTO = epmetUserOpenFeignClient.saveWxUser(wxUser).getData();
// 2、封装数据
wechatDTO.setSessionKey(SESSION_KEY);
wechatDTO.setUserId(userDTO.getId());
wechatDTO.setCustomerId(userDTO.getCustomerId());
LoginFormDTO loginDto = new LoginFormDTO();
loginDto.setClient(CLIENT);
loginDto.setApp(APP);
//3.生成业务token
String token = generateToken(loginDto, userDTO.getId());
//4.存放Redis
saveTokenDto(loginDto, userDTO.getId(), wechatDTO, token, userDTO.getCustomerId());
//5.接口返参
UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO();
userTokenResultDTO.setToken(token);
return userTokenResultDTO;
}
/**
* @Description 居民端登陆生成业务token的key
**/
@ -709,8 +744,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
}
/**
* @Description 获取客户信息
* @param appId
* @Description 获取客户信息
* @author zxc
*/
public PaCustomerDTO getCustomerInfo(String appId) {
@ -735,8 +770,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
}
/**
* @Description 获取UserWechatDTO
* @param resiLoginFormDTO
* @Description 获取UserWechatDTO
* @author zxc
*/
public UserWechatDTO getUserWeChat(WxLoginFormDTO resiLoginFormDTO) {
@ -837,8 +872,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
/**
* @Description 发送登录事件
* @return
* @Description 发送登录事件
* @author wxz
* @date 2021.06.08 15:27
*/
@ -869,6 +904,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
// (2)通过1、2拿到手机号之后,根据mobile+customerId去user_base_info表找userId,
// 是否注册居民:register_relation
// (3)没有则生成user、user_Base_info表记录
/**
* 钉钉应用的登录-居民端
*
@ -1032,16 +1068,16 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
* 企业内部应用开发不授权了
* https://open.dingtalk.com/document/orgapp-server/enterprise-internal-application-logon-free
* 建议用户信息保存在前端缓存中dd.setStorage或者cookie中避免每次进入应用都调用钉钉接口进行免登
*
* <p>
* 获取免登授权码
* 小程序免登
* 微应用免登
* 获取AccessToken
* 调用接口获取access_token详情请参考获取企业内部应用的access_token
*
* <p>
* 获取userid
* 调用接口获取用户的userid详情请参考通过免登码获取用户信息
*
* <p>
* 获取用户详情
* 调用接口获取用户详细信息详情请参考根据userId获取用户详情
*
@ -1116,6 +1152,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
/**
* 最原始的企业内部应用开发不授权给产品服务商
*
* @param miniAppId
* @param authCode
* @return
@ -1172,6 +1209,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol
/**
* 客户写死吧
*
* @return
*/
private String getCurrentCustomerId() {

Loading…
Cancel
Save