From 5c91bfa2aa3cfc90d1c79062c269eab08d6336e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Tue, 3 Dec 2024 18:03:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E7=99=BB=E5=BD=95?= =?UTF-8?q?=EF=BC=88=E4=B8=80=E5=8D=8A=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smart-switch-common/pom.xml | 6 ++ .../ruoyi/common/auth/ali/AliAuthService.java | 97 ++++++++++++++++++- .../com/ruoyi/common/auth/ali/AliConfig.java | 47 ++++++--- .../com/ruoyi/common/constant/Constants.java | 10 ++ .../common/core/domain/entity/SmUser.java | 3 + .../core/domain/model/AliLoginBody.java | 4 +- .../web/service/SysLoginService.java | 46 ++------- .../web/service/UserDetailsServiceImpl.java | 2 +- .../com/ruoyi/ss/user/domain/SmUserQuery.java | 3 + .../com/ruoyi/ss/user/mapper/SmUserMapper.xml | 6 ++ .../ruoyi/ss/user/service/ISmUserService.java | 14 +++ .../user/service/impl/SmUserServiceImpl.java | 55 ++++++++++- .../web/controller/app/AppAuthController.java | 3 +- .../src/main/resources/application-dev.yml | 8 +- 14 files changed, 245 insertions(+), 59 deletions(-) diff --git a/smart-switch-ruoyi/smart-switch-common/pom.xml b/smart-switch-ruoyi/smart-switch-common/pom.xml index e6bcb592..35fb64e5 100644 --- a/smart-switch-ruoyi/smart-switch-common/pom.xml +++ b/smart-switch-ruoyi/smart-switch-common/pom.xml @@ -16,6 +16,12 @@ </description> <dependencies> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + <version>2.0.53</version> + </dependency> + <!--hutool--> <dependency> <groupId>cn.hutool</groupId> diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliAuthService.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliAuthService.java index 7e331d64..59c517de 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliAuthService.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliAuthService.java @@ -1,8 +1,21 @@ package com.ruoyi.common.auth.ali; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.parser.Feature; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.internal.util.AlipayEncrypt; +import com.alipay.api.internal.util.AlipaySignature; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; +import com.ruoyi.common.exception.ServiceException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Map; + /** * 支付宝认证服务 * @author wjh @@ -11,12 +24,94 @@ import org.springframework.stereotype.Service; @Service public class AliAuthService { + @Autowired + private AlipayClient alipayClient; + @Autowired private AliConfig aliConfig; public String getOpenId(String loginCode) { - // TODO + // 构造请求参数以调用接口 + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + // 设置授权码 + request.setCode(loginCode); + // 设置授权方式 + request.setGrantType("authorization_code"); + + try { + AlipaySystemOauthTokenResponse response = alipayClient.execute(request); + System.out.println(response.getBody()); + + if (response.isSuccess()) { + return response.getUserId(); + } else { + System.out.println("调用失败"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); + } + } catch (Exception e) { + throw new ServiceException(e.getMessage()); + } + return null; } + + /** + * 通过密文获取到手机号 + */ + public String getPhoneNumber(String response) { + // TODO 获取手机号实现 + return this.decrypt(response); + } + + /** + * 解密 + * @param response 前端响应(密文) + */ + private String decrypt(String response) { + + //1. 获取验签和解密所需要的参数 + Map<String, String> openapiResult = JSON.parseObject(response,new TypeReference<Map<String, String>>() {}, Feature.OrderedField); + + String signType = "RSA2"; + String charset = "UTF-8"; + String encryptType = "AES"; + String sign = openapiResult.get("sign"); + String content = openapiResult.get("response"); + //判断是否为加密内容 + boolean isDataEncrypted = !content.startsWith("{"); + boolean signCheckPass = false; + //2. 验签 + String signContent = content; + // 你的小程序对应的支付宝公钥(为扩展考虑建议用appId+signType做密钥存储隔离) + String signVeriKey = aliConfig.getAlipayPublicKey(); + // 你的小程序对应的加解密密钥(为扩展考虑建议用appId+encryptType做密钥存储隔离) + String decryptKey = aliConfig.getPrivateKey();//如果是加密的报文则需要在密文的前后添加双引号 + if (isDataEncrypted) { + signContent = "\"" + signContent + "\""; + } try { + signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType); + } catch (AlipayApiException e) { + // 验签异常, 日志 + } if (!signCheckPass) { + //验签不通过(异常或者报文被篡改),终止流程(不需要做解密) + throw new ServiceException("验签失败"); + } + //3. 解密 + String plainData = null; + if (isDataEncrypted) { + try { + plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset); + } catch (AlipayApiException e) { + //解密异常, 记录日志 + throw new ServiceException("解密异常"); + } + } else { + plainData = content; + } + + return plainData; + } } diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliConfig.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliConfig.java index cd46b4e4..38e8e775 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliConfig.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/auth/ali/AliConfig.java @@ -1,6 +1,7 @@ package com.ruoyi.common.auth.ali; import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import lombok.Data; @@ -16,18 +17,36 @@ import org.springframework.stereotype.Component; @Data public class AliConfig { -// @Value("${ali.appId}") -// private String appId; -// -// @Value("${ali.privateKey}") -// private String privateKey; -// -// @Bean -// public AlipayConfig alipayConfig() { -// AlipayConfig config = new AlipayConfig(); -// config.setAppId(appId); -// config.setPrivateKey(privateKey); -// -// return config; -// } + // 应用ID + @Value("${ali.appId}") + private String appId; + + // 应用私钥 + @Value("${ali.privateKey}") + private String privateKey; + + // 应用公钥 + @Value("${ali.publicKey}") + private String publicKey; + + // 支付宝公钥 + @Value("${ali.alipayPublicKey}") + private String alipayPublicKey; + + private AlipayConfig getAlipayConfig() { + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId(appId); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setFormat("json"); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; + } + + @Bean + public AlipayClient alipayClient() throws AlipayApiException { + return new DefaultAlipayClient(getAlipayConfig()); + } } diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java index bba5e6bb..1352833c 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -172,11 +172,21 @@ public class Constants */ public static final String CUSTOM_LOGIN_WX = "wx_login"; + /** + * 支付宝登录 + */ + public static final String CUSTOM_LOGIN_ALI = "ali_login"; + /** * 登录用户为微信 */ public static final String USER_TYPE_WX = "USER_TYPE_WX"; + /** + * 登录用户为支付宝 + */ + public static final String USER_TYPE_ALI = "USER_TYPE_ALI"; + /** * 登录用户为APP账密登录 */ diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java index 807b008a..39103629 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java @@ -244,4 +244,7 @@ public class SmUser extends BaseEntity @ApiModelProperty("代理商是否允许商户开关设备") private Boolean agentAllowMchSwitch; + + @ApiModelProperty("支付宝openId") + private String aliOpenId; } diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/model/AliLoginBody.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/model/AliLoginBody.java index d7834f59..12cb4724 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/model/AliLoginBody.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/model/AliLoginBody.java @@ -16,8 +16,8 @@ import javax.validation.constraints.NotNull; @ApiModel public class AliLoginBody { -// @ApiModelProperty("用于获取手机号的授权码,首次登录必填") -// private String mobileCode; + @ApiModelProperty("获取手机号的密文") + private String mobileCiphertext; @NotBlank(message = "登录授权码不允许为空") @ApiModelProperty("my.getAuthCode获取的登录授权码,用于获取openId,必填") diff --git a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 2c03767d..8971c044 100644 --- a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -7,6 +7,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.auth.ali.AliAuthService; import com.ruoyi.common.core.domain.entity.SmUser; +import com.ruoyi.common.core.domain.model.AliLoginBody; import com.ruoyi.common.core.domain.model.WxLoginBody; import com.ruoyi.common.enums.UserStatus; import com.ruoyi.common.enums.UserType; @@ -270,7 +271,7 @@ public class SysLoginService // 通过openId查询用户 String openId = wxAuthService.getOpenId(body.getLoginCode()); ServiceUtil.assertion(openId == null, "获取微信openId失败"); - SmUser user = smUserService.selectSmUserByWxOpenId(openId); + SmUserVO user = smUserService.selectSmUserByWxOpenId(openId); // 若用户不存在,则使用openId进行注册 if (user == null || Objects.equals(user.getDelFlag(), UserStatus.DELETED.getCode())) { @@ -281,7 +282,7 @@ public class SysLoginService mobile = wxAuthService.getWxPhoneNumber(body.getMobileCode()); } // 用户注册 - user = registerWx(openId, mobile); + user = smUserService.registerWx(openId, mobile); } ServiceUtil.assertion(user == null, "用户不存在"); @@ -308,34 +309,6 @@ public class SysLoginService return tokenService.createToken(loginUser); } - /** - * 注册微信用户 - * @param openId 微信OpenId - */ - private SmUserVO registerWx(String openId, String mobile) { - if (StringUtils.isBlank(openId)) { - return null; - } - - String name = "微信" + openId.substring(openId.length() - 4); - - // 添加用户 - SmUserVO newUser = new SmUserVO(); - newUser.setUserName(name); - newUser.setWxOpenId(openId); - newUser.setPhonenumber(mobile); - newUser.setType(UserType.USER.getType()); - smUserService.insertSmUser(newUser); - - // 添加微信账户 -// Account accountData = new Account(); -// accountData.setUserId(newUser.getUserId()); -// accountData.setAccountNo(newUser.getWxOpenId()); -// accountData.setAccountType(AccountType.WECHAT.getType()); -// accountService.insertSmAccount(accountData); - - return newUser; - } public String userLogin(String username, String password, String code, String uuid) { // 验证码校验 @@ -344,7 +317,7 @@ public class SysLoginService return this.appLogin(username, password); } - public String aliLogin(WxLoginBody body) { + public String aliLogin(AliLoginBody body) { // 通过支付宝openId查询用户 String openId = aliAuthService.getOpenId(body.getLoginCode()); ServiceUtil.assertion(openId == null, "获取支付宝openId失败"); @@ -353,24 +326,23 @@ public class SysLoginService // 若用户不存在,则使用openId进行注册 if (user == null || Objects.equals(user.getDelFlag(), UserStatus.DELETED.getCode())) { - // 获取手机号 boolean loginWithPhone = sysConfigService.getBoolean(ConfigKey.ARRIVAL_DELAY); String mobile = null; - if (loginWithPhone && StringUtils.hasText(body.getMobileCode())) { - mobile = wxAuthService.getWxPhoneNumber(body.getMobileCode()); + if (loginWithPhone && StringUtils.hasText(body.getMobileCiphertext())) { + mobile = aliAuthService.getPhoneNumber(body.getMobileCiphertext()); } // 用户注册 - user = registerWx(openId, mobile); + user = smUserService.registerAli(openId, mobile); } ServiceUtil.assertion(user == null, "用户不存在"); Authentication authentication = null; try { - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserId(), Constants.CUSTOM_LOGIN_WX); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserId(), Constants.CUSTOM_LOGIN_ALI); // 用户名和密码等信息保存在一个上下文中,只要是同一线程等会就能拿到用户名和密码,也就是能在loadUserByUsername(String username)方法中进行密码验证等 AuthenticationContextHolder.setContext(authenticationToken); // 把用户登录类型放在上下文中的details属性中,在UserDetailsServiceImpl.loadUserByUsername中获取 - authenticationToken.setDetails(Constants.USER_TYPE_WX); + authenticationToken.setDetails(Constants.USER_TYPE_ALI); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); } diff --git a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java index ee621ba3..9c136929 100644 --- a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java +++ b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java @@ -58,7 +58,7 @@ public class UserDetailsServiceImpl implements UserDetailsService this.checkUser(user, username); passwordService.validate(user); return createLoginUser(user); - } else if(Constants.USER_TYPE_WX.equals(userType)) { + } else if(Constants.USER_TYPE_WX.equals(userType) || Constants.USER_TYPE_ALI.equals(userType) ) { // app 用户微信登录 SmUser user = smUserService.selectSmUserByUserId(Long.parseLong(username)); this.checkUser(user, username); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/domain/SmUserQuery.java b/smart-switch-service/src/main/java/com/ruoyi/ss/user/domain/SmUserQuery.java index 77066933..f83de936 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/domain/SmUserQuery.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/domain/SmUserQuery.java @@ -37,4 +37,7 @@ public class SmUserQuery extends SmUser { @ApiModelProperty("实名或用户名") private String realOrUserName; + + @ApiModelProperty("精准支付宝OpenId") + private String eqAliOpenId; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml index 4d11b443..5f4ca4db 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml @@ -60,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" su.show_bill_mobile_price, su.agent_device_service, su.agent_allow_mch_switch, + su.ali_open_id, if(su.is_real, su.real_name, su.user_name) as real_or_user_name, (select sum(stb.money) from sm_transaction_bill stb where stb.user_id = su.user_id and stb.type = '1' and stb.status = '2') as recharge_amount, (select sum(stb.arrival_amount) from sm_transaction_bill stb where stb.user_id = su.user_id and stb.type = '2' and stb.status = '14') as with_drawl_amount, @@ -91,6 +92,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="readMchLicence != null "> and read_mch_licence = #{readMchLicence}</if> <if test="showBillMobile != null "> and show_bill_mobile = #{showBillMobile}</if> <if test="excludeUserId != null">and su.user_id != #{excludeUserId}</if> + <if test="aliOpenId != null and aliOpenId != ''">and su.ali_open_id like concat('%', #{aliOpenId}, '%')</if> + <if test="eqAliOpenId != null and eqAliOpenId != ''">and su.ali_open_id = #{eqAliOpenId}</if> <if test="agentAllowMchSwitch != null">and su.agent_allow_mch_switch != #{agentAllowMchSwitch}</if> <if test="realOrUserName != null and realOrUserName != ''">and if(su.is_real, su.real_name, su.user_name) like concat('%', #{realOrUserName}, '%')</if> <if test="tenantDeviceId != null"> @@ -201,6 +204,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="showBillMobilePrice != null">show_bill_mobile_price,</if> <if test="agentDeviceService != null">agent_device_service,</if> <if test="agentAllowMchSwitch != null">agent_allow_mch_switch,</if> + <if test="aliOpenId != null">ali_open_id,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="userName != null and userName != ''">#{userName},</if> @@ -249,6 +253,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="showBillMobilePrice != null">#{showBillMobilePrice},</if> <if test="agentDeviceService != null">#{agentDeviceService},</if> <if test="agentAllowMchSwitch != null">#{agentAllowMchSwitch},</if> + <if test="aliOpenId != null">#{aliOpenId},</if> </trim> </insert> @@ -313,6 +318,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="showBillMobilePrice != null">show_bill_mobile_price = #{showBillMobilePrice},</if> <if test="agentDeviceService != null">agent_device_service = #{agentDeviceService},</if> <if test="agentAllowMchSwitch != null">agent_allow_mch_switch = #{agentAllowMchSwitch},</if> + <if test="aliOpenId != null">ali_open_id = #{aliOpenId},</if> </trim> where user_id = #{userId} </update> diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java index 6c5a4372..9759a267 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java @@ -268,4 +268,18 @@ public interface ISmUserService * @return */ SmUserVO selectSmUserByAliOpenId(String openId); + + /** + * 注册支付宝账号 + */ + SmUserVO registerAli(String openId, String mobile); + + /** + * 注册微信账号 + * @param openId + * @param mobile + * @return + */ + SmUserVO registerWx(String openId, String mobile); + } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java index dd937189..5b10fb23 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.ss.user.service.impl; +import com.github.pagehelper.PageHelper; import com.ruoyi.common.auth.wx.WxAuthService; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.entity.SmUser; @@ -633,8 +634,58 @@ public class SmUserServiceImpl implements ISmUserService */ @Override public SmUserVO selectSmUserByAliOpenId(String openId) { - // TODO - return null; + if (StringUtils.isBlank(openId)) { + return null; + } + SmUserQuery query = new SmUserQuery(); + query.setEqAliOpenId(openId); + return this.selectOne(query); + } + + @Override + public SmUserVO registerAli(String openId, String mobile) { + if (StringUtils.isBlank(openId)) { + return null; + } + + String name = "支付宝" + openId.substring(openId.length() - 4); + + // 添加用户 + SmUserVO data = new SmUserVO(); + data.setUserName(name); + data.setAliOpenId(openId); + data.setPhonenumber(mobile); + data.setType(UserType.USER.getType()); + int insert = this.insertSmUser(data); + ServiceUtil.assertion(insert != 1, "注册支付宝用户失败"); + + return this.selectSmUserByUserId(data.getUserId()); + } + + @Override + public SmUserVO registerWx(String openId, String mobile) { + if (StringUtils.isBlank(openId)) { + return null; + } + + String name = "微信" + openId.substring(openId.length() - 4); + + // 添加用户 + SmUserVO data = new SmUserVO(); + data.setUserName(name); + data.setWxOpenId(openId); + data.setPhonenumber(mobile); + data.setType(UserType.USER.getType()); + int insert = this.insertSmUser(data); + ServiceUtil.assertion(insert != 1, "注册微信用户失败"); + + return this.selectSmUserByUserId(data.getUserId()); + } + + private SmUserVO selectOne(SmUserQuery query) { + PageHelper.startPage(1, 1); + List<SmUserVO> list = this.selectSmUserList(query); + return CollectionUtils.getFirst(list); } private int selectCountByPhone(String phone) { diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppAuthController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppAuthController.java index 92f7381e..d24d908a 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppAuthController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppAuthController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.AliLoginBody; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.WxLoginBody; import com.ruoyi.common.enums.BusinessType; @@ -65,7 +66,7 @@ public class AppAuthController extends BaseController { @Log(title = "支付宝授权登录", businessType = BusinessType.OTHER) @ApiOperation("支付宝授权登录") @PostMapping("/aliLogin") - public AjaxResult aliLogin(@RequestBody @Validated WxLoginBody body) + public AjaxResult aliLogin(@RequestBody @Validated AliLoginBody body) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 diff --git a/smart-switch-web/src/main/resources/application-dev.yml b/smart-switch-web/src/main/resources/application-dev.yml index 013ef4d0..2d3bd212 100644 --- a/smart-switch-web/src/main/resources/application-dev.yml +++ b/smart-switch-web/src/main/resources/application-dev.yml @@ -138,5 +138,11 @@ liveness: # 支付宝小程序 ali: + # 应用ID appId: 2021004193649611 - privateKey: D:\project\smart-switch\alipayPublicKey_RSA2.txt + # 应用私钥 + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCLmoyeJgMCIh5xeYOzg1mnRTTPplkBTJAeXozAV/dTCu6vaKNPPRXjDwYILFzpYGAVhe9NNw6mcVq9WU4WEh4k05unDQIFNg0gXFQ9RNmcrV7uokVYAbTpPzmJHHF0oNXddsj9J37fFymP9GJCVuVGEkTHGP2DA6Odgq0xuHPiqQeyDzSldzpSwiRiYW71U534aJGz1MZQx3aI8KlANr2Z0c4WPdmYKmd0x137zHFU5yclsginrZL2tE34nBS5OJHqZQ/WLZIKhv8nGSvcILHhxktU6ggNhhGyf2OdlO9dr0z1exIZPrTMtAUQTEh/X/KqV8DgwNMFtNtT2LC47F+pAgMBAAECggEAAoSRELEi0MEIx4cnhu9RiKDI6Q3ZARr+Zm3SIA32GftSfrtmZqF1aZj1xOP38QWZ9glqXXwmuX3F4zBfJirBfGyMnCCx7qIg7np70ncRba/6zFcE5Sdyudo4EW7/5NiZwtrHmTlDIobqavw/YW7rx63Aq86Zk+lW5BpdQU5QWMAot4aFEPq91eo10a7EVigZKs9vkxKuW7OX/mI/BixkK9YBuq1xS6lefKjQfPPMPCRis3QQtkJWOw2myKXn7qcmCsecQwc3XdrV+6iFpYLOR2V4V3ALVFrDuGFb/2PBThWTiijPAypxQdb/Onu86Z3ObWDXYnPNspBODVxCWBWM2QKBgQDqJ31c37ZXUIfavFMBKp86evF9J+6cjGUOoU4iOd7NWW5QkLvNGAjw138ZQo7OKZ26LtzM2+4bbRVgNjdkVmj4ebdF0kijs7ruF+UhFneodFbwGCBXkMc3yLDLlYjZdeI9B/npGrwFuZAnmM1z+La6z0TlZoQnWe+WED5EUiKbJwKBgQCYoNOOPjb2ysXS/CEM/wX4TUDZ9Ykn85wVLOOhW17LYiMLBJq+uZj8BdN/rzdQ4YO4XqBaDA/t7GhiphaYAfsyy7f1oGEp4jtsyHz21uOPOz4ITnbJ9SUPz5VVmFgsCBjyh6KxckiMXEovcoV1Xqd535BPSQg5q1Y/RbOcaIswrwKBgBtqHjJWeunEIvPIIsu7KsNVC5sEptorUdWhqx00u1I9iz3hhCtiCgHwqQ/TDBc1JiNbQzy07y7E2cDW+CtGNqoIzh1dnmWUMGmZ4Ji8IaxWWqtnl7nI2Jo+Y/yh+FDFjYRpv6e8GpFtBWStbjiKwRIkHEPjecuFqxhdtHyZRTX3AoGAYbogm6SUdwMxFb4gv3yPawS0MJs6Hh2q5BghDJE/qkSFIanqF5MpNL3aRZiAd8ZeG/BjBiVREcvcrsWgE+a43DZ67MirTjEwUaAx+69ud6i8OH9dKkVQXMZS3UK1ukPZDXnxn2MItu7lBWpzr8pSvAN9GHcv0BU4HT1ZGx4JebsCgYEAjIbfv7CwfTwyRbevwVscmjEnvH1r336rU3GfC1C8tvPHVdjzVOEezRHwliT/uPLcUWmTLVtwnEGCcwqoz8PUpgvWeriHXlEqBX3pPixYa2kMLm+5se4qDO32QG1EQXeLPs5UWgqfItgqNEsdeFdsE27LEIqjmRzHoPTEKaylUVs= + # 应用公钥 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi5qMniYDAiIecXmDs4NZp0U0z6ZZAUyQHl6MwFf3Uwrur2ijTz0V4w8GCCxc6WBgFYXvTTcOpnFavVlOFhIeJNObpw0CBTYNIFxUPUTZnK1e7qJFWAG06T85iRxxdKDV3XbI/Sd+3xcpj/RiQlblRhJExxj9gwOjnYKtMbhz4qkHsg80pXc6UsIkYmFu9VOd+GiRs9TGUMd2iPCpQDa9mdHOFj3ZmCpndMdd+8xxVOcnJbIIp62S9rRN+JwUuTiR6mUP1i2SCob/Jxkr3CCx4cZLVOoIDYYRsn9jnZTvXa9M9XsSGT60zLQFEExIf1/yqlfA4MDTBbTbU9iwuOxfqQIDAQAB + # 支付宝公钥 + alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi1vuaEyUkCgagVodfOJp/rk1gwVzs8f/QzEXAEUwZZne+VE8be0rUv9SLY0uOjixanw0yhG9LinHJlePCvuK0Y31Cxx0BXgOt27nGTSqm4oINFYd5WL1vNMPzPE2gat+7ohO3h6FRlmsxsq9W5ZRkko+04Be4lEGZ+Ter/b2v3m4I3CzX6kr42e39QlDRUpD9l9ixpkmfEatdDf01Xp++Tvr/3EZcYoG3oPGztI7B8Kw8KV/6he3ZBlGROWz8ywZSBtR294Y1PRDv+3QXC3nr7J6OrTbnvj+MAtKmwjdkFHiFVr3gfenzeI87LnXrDPahda7Mn6ToQ1NU9tsWCcJgQIDAQAB