PassportService.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package com.care.client.service;
  2. import com.care.client.vo.MemberInfoVO;
  3. import com.care.client.vo.MemberInitParams;
  4. import com.care.common.cache.RedisKeyConstant;
  5. import com.care.common.cache.RedisUtil;
  6. import com.care.common.entity.CareMemberInfo;
  7. import com.care.common.enums.ValidStatusEnum;
  8. import com.care.common.exception.BDException;
  9. import com.care.common.service.CareMemberInfoService;
  10. import com.care.common.util.CheckUtils;
  11. import com.care.common.util.Result;
  12. import com.care.common.util.WxUtil;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.apache.commons.codec.digest.DigestUtils;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.stereotype.Service;
  17. import javax.annotation.Resource;
  18. import java.util.Date;
  19. @Slf4j
  20. @Service
  21. public class PassportService extends AbstractPassportService {
  22. @Resource
  23. private RedisUtil redisUtil;
  24. @Resource
  25. private WxPassportService wxPassportService;
  26. @Resource
  27. private CareMemberInfoService careMemberInfoService;
  28. public Result<Object> login(MemberInitParams params) {
  29. if ("wx".equalsIgnoreCase(params.getLoginType())) {
  30. CheckUtils.valueIsNull(params, "code");
  31. CareMemberInfo careMemberInfo = wxPassportService.login(params);
  32. if(careMemberInfo != null){
  33. if (ValidStatusEnum.INVALID.getValue().equals(careMemberInfo.getStatus())){
  34. return Result.error("用户已经停用");
  35. }
  36. params.setPhone(careMemberInfo.getPhone());
  37. params.setOpenid(careMemberInfo.getOpenId());
  38. return cache(params);
  39. } else {
  40. return Result.success();
  41. }
  42. } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
  43. CheckUtils.valueIsNull(params, "phone");
  44. CheckUtils.valueIsNull(params, "password");
  45. return cache(params);
  46. }
  47. return Result.error();
  48. }
  49. public void logout(String token) {
  50. CheckUtils.notNull(token, "token");
  51. MemberInfoVO memberInfoVO = (MemberInfoVO) redisUtil.hget(RedisKeyConstant.PINANBAO_LOGIN_INFO, token);
  52. if (memberInfoVO != null) {
  53. redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, null);
  54. }
  55. }
  56. public MemberInfoVO checkToken(String token) {
  57. CheckUtils.notNull(token, "token");
  58. if (!redisUtil.hHasKey(RedisKeyConstant.PINANBAO_LOGIN_INFO, token)) {
  59. throw new BDException(400002, "TOKEN WAS WRONG :[{"+token+"}]" );
  60. }
  61. return (MemberInfoVO) redisUtil.hget(RedisKeyConstant.PINANBAO_LOGIN_INFO, token);
  62. }
  63. public Boolean changePwd(String password,Long memberId) {
  64. CareMemberInfo careMemberInfo = careMemberInfoService.getById(memberId);
  65. careMemberInfo.setPassword(DigestUtils.md5Hex(password));
  66. return careMemberInfoService.updateById(careMemberInfo);
  67. }
  68. public Result<Object> decodePhoneNumber(String code, String encryptedData,String iv) {
  69. MemberInitParams params = (MemberInitParams) redisUtil.hget(RedisKeyConstant.PINANBAO_WX_LOGIN_INFO, code);
  70. String openId = params.getOpenid();
  71. if (StringUtils.isEmpty(openId)){
  72. return Result.error();
  73. }
  74. String unionId = params.getUnionid();
  75. //判断是否注册过了
  76. CareMemberInfo careMemberInfoDb = careMemberInfoService.detailByOpenid(openId);
  77. if(careMemberInfoDb != null) {
  78. return cache(params);
  79. }
  80. String sessionKey = params.getSessionKey();
  81. log.warn("encryptedData==" + encryptedData);
  82. log.warn("sessionKey==" + sessionKey);
  83. log.warn("iv==" + iv);
  84. String phone = WxUtil.getPhoneNumber(encryptedData,sessionKey,iv);
  85. if (StringUtils.isEmpty(phone)) {
  86. return Result.error();
  87. }
  88. params.setPhone(phone);
  89. CareMemberInfo member = careMemberInfoService.detailByPhone(phone);
  90. if (member == null) { //注册新用户
  91. CareMemberInfo careMemberInfo = new CareMemberInfo();
  92. careMemberInfo.setPhone(phone);
  93. careMemberInfo.setOpenId(openId);
  94. careMemberInfo.setUnionId(unionId);
  95. //前端主动获取传给后台,下面不用了
  96. // String accessToken= wxPassportService.accessToken();
  97. // WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
  98. //
  99. // String infoUrl = MessageFormat.format(wxConfig.getInfoUrl(),accessToken, openId);
  100. // JSONObject jsonObject = HttpUtil.httpGet(infoUrl);
  101. // log.warn("-----jsonObject:[{}]", jsonObject);
  102. // if(jsonObject != null){
  103. // String headimgurl = jsonObject.getStr("headimgurl");
  104. // careMemberInfo.setProfile(headimgurl);
  105. // String nickname = jsonObject.getStr("nickname");
  106. // careMemberInfo.setNickname(nickname);
  107. // int sex = jsonObject.getInt("sex");
  108. // careMemberInfo.setGender(sex == 1 ? "M" : (sex == 2 ? "W": null));
  109. // }
  110. careMemberInfo.setCreateTime(new Date());
  111. boolean flag = careMemberInfoService.save(careMemberInfo);
  112. if (flag) {
  113. return cache(params);
  114. } else {
  115. return Result.error();
  116. }
  117. } else { //已经注册了
  118. if (StringUtils.isNotBlank(openId) && StringUtils.isNotBlank(unionId)) {
  119. boolean updated = careMemberInfoService.modifyUnionId(openId, openId);
  120. if (!updated) {
  121. log.error("修改用户平台唯一标识出现错误, openId: " + openId + "; unionId: " + unionId);
  122. }
  123. }
  124. return cache(params);
  125. }
  126. }
  127. }