WeChatTokenGranter.java 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package org.springblade.modules.auth.granter;
  2. import com.alibaba.fastjson.JSONObject;
  3. import lombok.AllArgsConstructor;
  4. import org.springblade.common.cache.CacheNames;
  5. import org.springblade.common.cache.ParamCache;
  6. import org.springblade.common.enums.YesOrNoEnum;
  7. import org.springblade.core.log.exception.ServiceException;
  8. import org.springblade.core.redis.cache.BladeRedis;
  9. import org.springblade.core.tool.utils.Func;
  10. import org.springblade.modules.auth.enums.UserEnum;
  11. import org.springblade.modules.auth.provider.ITokenGranter;
  12. import org.springblade.modules.auth.provider.TokenParameter;
  13. import org.springblade.modules.auth.utils.TokenUtil;
  14. import org.springblade.modules.platform.service.UserAppService;
  15. import org.springblade.modules.system.entity.User;
  16. import org.springblade.modules.system.entity.UserApp;
  17. import org.springblade.modules.system.entity.UserInfo;
  18. import org.springblade.modules.system.entity.UserWeChat;
  19. import org.springblade.modules.system.service.IUserService;
  20. import org.springblade.modules.system.service.IUserWeChatService;
  21. import org.springframework.stereotype.Component;
  22. import javax.annotation.Resource;
  23. import java.math.BigDecimal;
  24. import java.time.Duration;
  25. import java.util.Objects;
  26. /**
  27. * Author pangqijun
  28. * Date 2022/11/21
  29. * Description 微信TokenGranter
  30. */
  31. @Component
  32. @AllArgsConstructor
  33. public class WeChatTokenGranter implements ITokenGranter {
  34. public static final String GRANT_TYPE = "wxAuth";
  35. public static final Integer FAIL_COUNT = 5;
  36. public static final String FAIL_COUNT_VALUE = "account.failCount";
  37. private final IUserService userService;
  38. private final IUserWeChatService userWeChatService;
  39. private final BladeRedis bladeRedis;
  40. @Resource
  41. private UserAppService userAppService;
  42. @Override
  43. public UserInfo grant(TokenParameter tokenParameter) {
  44. String tenantId = tokenParameter.getArgs().getStr("tenantId");
  45. String getPhoneNumberCode = tokenParameter.getArgs().getStr("getPhoneNumberCode");
  46. String code = tokenParameter.getArgs().getStr("code");
  47. // 获取用户手机号
  48. String phoneNumber = userWeChatService.getPhoneNumber(getPhoneNumberCode);
  49. // 获取openId
  50. JSONObject jsonObject = userWeChatService.getopenId(code);
  51. String openId = jsonObject.getString("openid");
  52. String unionId = jsonObject.getString("unionid");
  53. User user = new User();
  54. UserWeChat userWeChat = userWeChatService.lambdaQuery().eq(UserWeChat::getOpenId, openId).one();
  55. if (userWeChat == null){
  56. // User byAccount = userService.getByAccount(phoneNumber);
  57. User byAccount = userService.getByAccountAndType(phoneNumber,UserEnum.APP.getCategory());
  58. if (Objects.nonNull(byAccount)){
  59. throw new ServiceException("您提供的手机号已注册,请更换手机号!");
  60. }
  61. //注册用户
  62. user.setName("微信用户");
  63. user.setAccount(phoneNumber);
  64. user.setPhone(phoneNumber);
  65. user.setRealName("用户" + phoneNumber.substring(7));
  66. user.setSex(1);
  67. user.setUserType(UserEnum.APP.getCategory());//app
  68. userService.save(user);
  69. UserApp userApp = new UserApp();
  70. userApp.setUserId(user.getId());
  71. userApp.setState(YesOrNoEnum.YES.getValue());
  72. userApp.setNowMoney(new BigDecimal(0));
  73. userApp.setLivingHall(YesOrNoEnum.NO.getValue());
  74. userApp.setIsStore(YesOrNoEnum.NO.getValue());
  75. userAppService.save(userApp);
  76. userWeChat = new UserWeChat();
  77. userWeChat.setOpenId(openId);
  78. userWeChat.setUnionId(unionId);
  79. userWeChat.setUserId(user.getId());
  80. }
  81. user = userService.getById(userWeChat.getUserId());
  82. userWeChat.setSessionKey(jsonObject.getString("session_key"));
  83. userWeChatService.saveOrUpdate(userWeChat);
  84. UserInfo userInfo = userService.userInfo(user.getId(), UserEnum.APP);
  85. userInfo.setOpenId(openId);
  86. return userInfo;
  87. }
  88. }