zoujiajian 1 år sedan
förälder
incheckning
7e68b61f70

+ 36 - 14
netflix-service/src/main/java/com/cyksj/service/pay/impl/AliPayCommonServiceImpl.java

@@ -6,11 +6,12 @@ import cn.hutool.core.util.StrUtil;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.AlipayRequest;
-import com.alipay.api.AlipayResponse;
 import com.alipay.api.domain.AlipayTradePagePayModel;
 import com.alipay.api.domain.AlipayTradeWapPayModel;
 import com.alipay.api.request.AlipayTradePagePayRequest;
 import com.alipay.api.request.AlipayTradeWapPayRequest;
+import com.alipay.api.request.AlipayUserInfoShareRequest;
+import com.alipay.api.response.AlipayUserInfoShareResponse;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.EnvCommonService;
@@ -210,6 +211,12 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 				.gt(ZfbShopOrderDayLimit::getDayRemainOrders, 0)
 				.gt(ZfbShopOrderDayLimit::getHourLimitOrders, 0));
 		for (ZfbShopOrderDayLimit orderDayLimit : orderDayLimits) {
+			//检测商户状态
+			if (!checkZfbShopStatus(orderDayLimit.getAppId())) {
+				orderDayLimit.setStatus(false);
+				zfbShopOrderDayLimitMapper.updateById(orderDayLimit);
+				continue;
+			}
 			Integer update = zfbShopOrderDayLimitMapper.decrRemainOrdersById(orderDayLimit.getId());
 			if (update == 1) {
 				return orderDayLimit;
@@ -249,21 +256,9 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 		alipayRequest.setNotifyUrl(notifyUrl);
 		String form = null;
 		try {
-			AlipayResponse alipayResponse = alipayClient.pageExecute(alipayRequest);
-			if (!alipayResponse.isSuccess()) {
-				String shopId = orderPayBuilderDto.getShopId();
-				ZfbShopOrderDayLimit dayLimit = zfbShopOrderDayLimitMapper.selectOne(Wrappers.lambdaQuery(ZfbShopOrderDayLimit.class)
-						.eq(ZfbShopOrderDayLimit::getAppId, shopId)
-						.last("limit 1"));
-				if (dayLimit != null) {
-					dayLimit.setStatus(false);
-					zfbShopOrderDayLimitMapper.updateById(dayLimit);
-				}
-				throw BusinessRuntimeException.getInstance("支付异常,请刷新页面重试");
-			}
 			//调用SDK生成表单
 			//pagePay 统一下单接口
-			form = alipayResponse.getBody();
+			form = alipayClient.pageExecute(alipayRequest).getBody();
 		} catch (AlipayApiException e) {
 			log.error("支付宝生成表单错误:{}", StringUtil.getErrorText(e));
 		}
@@ -483,4 +478,31 @@ public class AliPayCommonServiceImpl implements AliPayCommonService {
 				notifyUrl,
 				returnUrl);
 	}
+
+	/**
+	 * 检测商户状态
+	 */
+	public Boolean checkZfbShopStatus(String shopId) {
+		// 创建API请求对象
+		AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
+		try {
+			AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(shopId);
+			// 发送请求
+			AlipayUserInfoShareResponse response = alipayClient.certificateExecute(request);
+			// 处理响应
+			if (response.isSuccess()) {
+				String userStatus = response.getUserStatus();
+				log.info("商户状态: " + userStatus);
+				if (!"T".equals(userStatus)) {
+					log.error("{}商户账户存在异常,请及时处理!", shopId);
+					return false;
+				}
+				return true;
+			}
+			log.error("错误码:" + response.getCode() + ",错误信息:" + response.getSubMsg());
+		} catch (AlipayApiException e) {
+			log.error("接口调用异常: {}", StringUtil.getErrorText(e));
+		}
+		return false;
+	}
 }