From 71fd1accb1587e44d9fd7fb4fc766a3cddb43760 Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期四, 22 八月 2024 15:09:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java | 12 +++-
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java | 7 +
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java | 41 +++++++++++--
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml | 16 ++--
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java | 57 ++++++++++++++++++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java | 5 +
6 files changed, 113 insertions(+), 25 deletions(-)
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java
index a31fb9e..0678b48 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java
@@ -1,18 +1,24 @@
package com.ruoyi.account.ali.tools;
+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.DefaultAlipayClient;
+import com.alipay.api.internal.util.AlipayEncrypt;
+import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayUserInfoShareRequest;
-import com.alipay.api.request.AlipayUserUserinfoShareRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserInfoShareResponse;
-import com.alipay.api.response.AlipayUserUserinfoShareResponse;
import com.ruoyi.account.ali.Constant.AliConstant;
import com.ruoyi.account.ali.model.AliProperties;
+import com.ruoyi.common.core.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
/**
* @author xiaochen
@@ -76,6 +82,53 @@
}
/**
+ * 获取用户手机号
+ * @param response
+ * @return
+ */
+ public String getPhoneNumber(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;
+ if (isDataEncrypted) {
+ signContent = "\"" + signContent + "\"";
+ } try {
+ signCheckPass = AlipaySignature.rsaCheck(signContent, sign, aliProperties.getAlipayPublicKey(), charset, signType);
+ } catch (AlipayApiException e) {
+ // 验签异常, 日志
+ } if (!signCheckPass) {
+ //验签不通过(异常或者报文被篡改),终止流程(不需要做解密)
+ throw new ServiceException("验签失败");
+ }
+ //3. 解密
+ String plainData = null;
+ if (isDataEncrypted) {
+ try {
+ plainData = AlipayEncrypt.decryptContent(content, encryptType, "XABBSOeWDakvuG9TDez4Qg====", charset);
+ } catch (AlipayApiException e) {
+ //解密异常, 记录日志
+ throw new ServiceException("解密异常");
+ }} else {
+ plainData = content;
+ }
+ log.info("解密后的数据:{}", plainData);
+ String phoneNumber = "";
+ if (plainData.contains("mobile")) {
+ phoneNumber = JSON.parseObject(plainData).getString("mobile");
+ }
+ return phoneNumber;
+ }
+
+ /**
* 初始化支付宝配置
* @return
*/
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
index a437bb4..9062a30 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
@@ -18,6 +18,7 @@
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.service.TAppUserService;
import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.system.api.model.LoginUserApplet;
@@ -56,10 +57,15 @@
AlipaySystemOauthTokenResponse response = new AliAppletTools(aliProperties).login(appletUserLogin.getCode());
if (response.isSuccess()) {
// 获取用户信息
- AlipayUserInfoShareResponse userInfo = new AliAppletTools(aliProperties).getUserInfo(appletUserLogin.getToken());
- log.info("获取支付宝用户信息:{}", userInfo);
+// AlipayUserInfoShareResponse userInfo = new AliAppletTools(aliProperties).getUserInfo(response.getAccessToken());
+ if(StringUtils.isEmpty(appletUserLogin.getToken())){
+ return AjaxResult.success();
+ }
+ // 获取用户手机号
+ String phoneNumber = new AliAppletTools(aliProperties).getPhoneNumber(appletUserLogin.getToken());
+ log.info("获取支付宝用户信息:{}", phoneNumber);
// 用户信息封装
- return AjaxResult.ok(appUserService.aliLogin(response,userInfo));
+ return AjaxResult.success(appUserService.aliLogin(response,phoneNumber));
} else {
String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
log.warn("诊断结果:{}",diagnosisUrl);
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
index 2fcec55..64f86fb 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
@@ -15,6 +15,7 @@
import com.ruoyi.account.wx.tools.WxAppletTools;
import com.ruoyi.account.wx.tools.WxUtils;
import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
@@ -22,7 +23,6 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
@@ -60,8 +60,11 @@
// if (StringUtils.isNotBlank(data.getSignature())) {
// WxUtils.verifySignature(data.getRawData(), sessionKey, data.getSignature());
// }
+ if(StringUtils.isEmpty(data.getEncryptedData()) || StringUtils.isEmpty(data.getIv())){
+ return AjaxResult.success();
+ }
AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv());
appletUserDecodeData.setOpenId(openid);
- return AjaxResult.ok(appUserService.wxLogin(appletUserDecodeData));
+ return AjaxResult.success(appUserService.wxLogin(appletUserDecodeData));
}
}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java
index 957d698..9e59184 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java
@@ -28,10 +28,11 @@
/**
* 支付宝小程序登录用户封装
- * @param userInfo
+ * @param response
* @return
*/
- Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserInfoShareResponse userInfo);
+// Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserInfoShareResponse userInfo);
+ Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response,String phone);
/**
* 封装用户信息和token
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java
index c9fe14f..d3351ef 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java
@@ -66,34 +66,59 @@
}
@Override
- public Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserInfoShareResponse userInfo) {
+ public Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response,String phone) {
// 通过手机号查询用户,是否已存在手动导入用户,包含微信用户
TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
- .eq(TAppUser::getPhone, userInfo.getMobile())
+ .eq(TAppUser::getPhone, phone)
.isNull(TAppUser::getAliOpenid)
.last("LIMIT 1"));
if(Objects.isNull(appUser)){
// 先使用openId和当前手机号进行查询
appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
.eq(TAppUser::getAliOpenid, response.getOpenId())
- .eq(TAppUser::getPhone, userInfo.getMobile())
+ .eq(TAppUser::getPhone, phone)
.last("LIMIT 1"));
if(Objects.isNull(appUser)){
appUser = new TAppUser();
- appUser.setPhone(userInfo.getMobile());
+ appUser.setPhone(phone);
}
}
if(Objects.nonNull(appUser.getStatus())){
throwInfo(appUser.getStatus());
}
- appUser.setAvatar(userInfo.getAvatar());
- appUser.setCity(userInfo.getCity());
- appUser.setName(userInfo.getNickName());
- appUser.setProvince(userInfo.getProvince());
appUser.setAliOpenid(response.getOpenId());
this.saveOrUpdate(appUser);
return this.getUserInfo(appUser);
}
+// @Override
+// public Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserInfoShareResponse userInfo) {
+// // 通过手机号查询用户,是否已存在手动导入用户,包含微信用户
+// TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
+// .eq(TAppUser::getPhone, userInfo.getMobile())
+// .isNull(TAppUser::getAliOpenid)
+// .last("LIMIT 1"));
+// if(Objects.isNull(appUser)){
+// // 先使用openId和当前手机号进行查询
+// appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class)
+// .eq(TAppUser::getAliOpenid, response.getOpenId())
+// .eq(TAppUser::getPhone, userInfo.getMobile())
+// .last("LIMIT 1"));
+// if(Objects.isNull(appUser)){
+// appUser = new TAppUser();
+// appUser.setPhone(userInfo.getMobile());
+// }
+// }
+// if(Objects.nonNull(appUser.getStatus())){
+// throwInfo(appUser.getStatus());
+// }
+// appUser.setAvatar(userInfo.getAvatar());
+// appUser.setCity(userInfo.getCity());
+// appUser.setName(userInfo.getNickName());
+// appUser.setProvince(userInfo.getProvince());
+// appUser.setAliOpenid(response.getOpenId());
+// this.saveOrUpdate(appUser);
+// return this.getUserInfo(appUser);
+// }
@Override
public Map<String, Object> getUserInfo(TAppUser appUser) {
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
index b7b0d0b..a433566 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
@@ -58,10 +58,10 @@
and t1.code LIKE CONCAT('%',#{req.code},'%')
</if>
<if test="req.type != null and req.type != '' and req.type == 1">
- and t1.coupon_discount_amount != null and t1.coupon_discount_amount != 0
+ and t1.coupon_discount_amount IS NOT NULL and t1.coupon_discount_amount != 0
</if>
<if test="req.type != null and req.type != '' and req.type == 2">
- and t1.vip_discount_amount != null and t1.vip_discount_amount != 0
+ and t1.vip_discount_amount IS NOT NULL and t1.vip_discount_amount != 0
</if>
<if test="null != req.userIds and req.userIds.size()>0" >
and t1.app_user_id in
@@ -97,13 +97,13 @@
and t2.code LIKE CONCAT('%',#{req.code},'%')
</if>
<if test="req.type != null and req.type != '' and req.type == 1">
- and t2.coupon_discount_amount != null and t1.coupon_discount_amount != 0
+ and t2.coupon_discount_amount IS NOT NULL and t2.coupon_discount_amount != 0
</if>
<if test="req.type != null and req.type != '' and req.type == 2">
- and t2.vip_discount_amount != null and t1.vip_discount_amount != 0
+ and t2.vip_discount_amount IS NOT NULL and t2.vip_discount_amount != 0
</if>
<if test="req.type == null ">
- and t2.vip_discount_amount != null and t1.vip_discount_amount != 0 and t2.coupon_discount_amount != null and t1.coupon_discount_amount != 0
+ and t2.vip_discount_amount IS NOT NULL and t2.vip_discount_amount != 0 and t2.coupon_discount_amount IS NOT NULL and t2.coupon_discount_amount != 0
</if>
<if test="null != req.userIds and req.userIds.size()>0" >
and t2.app_user_id in
@@ -129,12 +129,12 @@
3 as orderType
from t_vip_order t3
where 1 = 1
- and t3.type ==1
+ and t3.type =1
<if test="null != req.code and req.code!=''">
and t3.code LIKE CONCAT('%',#{req.code},'%')
</if>
<if test="req.type == null ">
- and t3.discount_amount != null and t3.discount_amount != 0
+ and t3.discount_amount IS NOT NULL and t3.discount_amount != 0
</if>
<if test="null != req.userIds and req.userIds.size()>0" >
and t3.app_user_id in
@@ -164,7 +164,7 @@
and t4.code LIKE CONCAT('%',#{req.code},'%')
</if>
<if test="req.type == null ">
- and t4.discount_amount != null and t4.discount_amount != 0
+ and t4.discount_amount IS NOT NULL and t4.discount_amount != 0
</if>
<if test="null != req.userIds and req.userIds.size()>0" >
and t4.app_user_id in
--
Gitblit v1.7.1