Просмотр исходного кода

fix 支付宝客户端初始化

zoujiajian 3 лет назад
Родитель
Сommit
23d4211204

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ShopConfig.java

@@ -58,4 +58,9 @@ public class ShopConfig extends BaseEntity{
     @DbIgnore
     @TableField(exist = false)
     private Integer channelCount;
+
+    /***
+     * 是否需要携带证书
+     */
+    private Boolean isCert;
 }

+ 0 - 62
netflix-service/src/main/java/com/cyksj/common/AliPayCommon.java

@@ -1,62 +0,0 @@
-package com.cyksj.common;
-
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.AlipayConfig;
-import com.alipay.api.DefaultAlipayClient;
-import com.cyksj.config.zfb.BaseZfbConfig;
-import com.cyksj.model.entity.ShopConfig;
-
-/*
- *项目名: netflix
- *文件名: AliPayCommon
- *创建者: JavaZou
- *创建时间:2022/11/9 14:07
- */
-public class AliPayCommon {
-	/**
-	 * 支付宝证书路径
-	 */
-	private static final String ALIPAY_CERT_PATH = "cert/alipay";
-
-	/**
-	 * 应用公钥证书名字
-	 */
-	private static final String ALIPAY_APP_PUBLIC_CERT_NAME = "appCertPublicKey.crt";
-
-	/**
-	 * 支付宝公钥证书名字
-	 */
-	private static final String ALIPAY_PUBLIC_CERT_NAME = "alipayCertPublicKey_RSA2.crt";
-
-	/**
-	 * 支付宝根证书名字
-	 */
-	private static final String ALIPAY_ROOT_CERT_NAME = "alipayRootCert.crt";
-
-	/**
-	 * 获取ALI支付客户端
-	 * isCert 是否需要证书
-	 */
-	public static AlipayClient getAlipayClient(ShopConfig config, Boolean isCert) throws AlipayApiException {
-		AlipayConfig alipayConfig = new AlipayConfig();
-		//网关地址
-		alipayConfig.setServerUrl(BaseZfbConfig.url);
-		alipayConfig.setAppId(config.getAppId());
-		alipayConfig.setPrivateKey(config.getAppPrivateKey());
-		alipayConfig.setFormat(BaseZfbConfig.format);
-		alipayConfig.setCharset(BaseZfbConfig.charset);
-		alipayConfig.setSignType(BaseZfbConfig.signType);
-		if (isCert) {
-			String shopId = config.getAppId();
-			// 设置应用公钥证书路径
-			alipayConfig.setAppCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_APP_PUBLIC_CERT_NAME));
-			// 设置支付宝公钥证书路径
-			alipayConfig.setAlipayPublicCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_PUBLIC_CERT_NAME));
-			// 设置支付宝根证书路径
-			alipayConfig.setRootCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_ROOT_CERT_NAME));
-		}
-		AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
-		return alipayClient;
-	}
-}

+ 94 - 0
netflix-service/src/main/java/com/cyksj/config/zfb/AliPayClientFactory.java

@@ -0,0 +1,94 @@
+package com.cyksj.config.zfb;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.channel.ShopConfigMapper;
+import com.cyksj.model.entity.ShopConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/*
+ *项目名: netflix
+ *文件名: AliPayClientFactory
+ *创建者: JavaZou
+ *创建时间:2022/11/2 11:18
+ */
+@Component
+public class AliPayClientFactory {
+	/**
+	 * 支付宝证书路径
+	 */
+	private static final String ALIPAY_CERT_PATH = "cert/alipay";
+
+	/**
+	 * 应用公钥证书名字
+	 */
+	private static final String ALIPAY_APP_PUBLIC_CERT_NAME = "appCertPublicKey.crt";
+
+	/**
+	 * 支付宝公钥证书名字
+	 */
+	private static final String ALIPAY_PUBLIC_CERT_NAME = "alipayCertPublicKey_RSA2.crt";
+
+	/**
+	 * 支付宝根证书名字
+	 */
+	private static final String ALIPAY_ROOT_CERT_NAME = "alipayRootCert.crt";
+
+	private static Map<String, AlipayClient> alipayClientMap = new ConcurrentHashMap<>();
+
+	@Autowired
+	private ShopConfigMapper shopConfigMapper;
+
+	/**
+	 * 初始化
+	 */
+	@PostConstruct
+	public void initAliPayClient() {
+		List<ShopConfig> zfbShopConfig = shopConfigMapper.selectList(Wrappers.lambdaQuery(ShopConfig.class)
+				.eq(ShopConfig::getType, "zfb"));
+		zfbShopConfig.forEach(config -> {
+			AlipayConfig alipayConfig = new AlipayConfig();
+			//网关地址
+			alipayConfig.setServerUrl(BaseZfbConfig.url);
+			alipayConfig.setAppId(config.getAppId());
+			alipayConfig.setPrivateKey(config.getAppPrivateKey());
+			alipayConfig.setFormat(BaseZfbConfig.format);
+			alipayConfig.setCharset(BaseZfbConfig.charset);
+			alipayConfig.setSignType(BaseZfbConfig.signType);
+			if (config.getIsCert()) {
+				String shopId = config.getAppId();
+				// 设置应用公钥证书路径
+				alipayConfig.setAppCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_APP_PUBLIC_CERT_NAME));
+				// 设置支付宝公钥证书路径
+				alipayConfig.setAlipayPublicCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_PUBLIC_CERT_NAME));
+				// 设置支付宝根证书路径
+				alipayConfig.setRootCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_ROOT_CERT_NAME));
+			}
+			AlipayClient alipayClient = null;
+			try {
+				alipayClient = new DefaultAlipayClient(alipayConfig);
+			} catch (AlipayApiException e) {
+				return;
+			}
+			alipayClientMap.putIfAbsent(config.getAppId(), alipayClient);
+		});
+	}
+
+	public static AlipayClient getAlipayClient(String shopId) {
+		AlipayClient alipayClient = alipayClientMap.get(shopId);
+		if (alipayClient == null) {
+			throw BusinessRuntimeException.getInstance("未配置该支付宝商户");
+		}
+		return alipayClient;
+	}
+}

+ 0 - 51
netflix-service/src/main/java/com/cyksj/config/zfb/ZfbConfig.java

@@ -1,51 +0,0 @@
-package com.cyksj.config.zfb;
-
-import lombok.Getter;
-
-/*
- *项目名: netflix
- *文件名: YHLXZfbConfig
- *创建者: JavaZou
- *创建时间:2022/11/2 11:18
- */
-@Getter
-public enum ZfbConfig {
-	YHLX_ZfB("银河录像支付宝",
-			"2021003159660212",
-			"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"),
-	;
-	/**
-	 * 描述
-	 */
-	private String desc;
-
-	/**
-	 * appid 即创建应用后生成。
-	 */
-	private String appId;
-
-	/**
-	 * 支付宝公钥
-	 */
-	private String alipayPublicKey;
-
-	/**
-	 * 应用公钥
-	 */
-	public String aliAppPublicKey;
-
-	/**
-	 * 开发者私钥,由开发者自己生成
-	 */
-	private String privateKey;
-
-	ZfbConfig(String desc, String appId, String alipayPublicKey, String aliAppPublicKey, String privateKey) {
-		this.desc = desc;
-		this.appId = appId;
-		this.alipayPublicKey = alipayPublicKey;
-		this.aliAppPublicKey = aliAppPublicKey;
-		this.privateKey = privateKey;
-	}
-}

+ 5 - 10
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -16,7 +16,6 @@ import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
 import com.alipay.api.response.AlipayTradeRefundResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.cyksj.common.AliPayCommon;
 import com.cyksj.common.EnvCommonService;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.constant.TaskTypeEnum;
@@ -28,6 +27,7 @@ import com.cyksj.common.util.Codec;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.Xmls;
 import com.cyksj.config.WeChatConfig;
+import com.cyksj.config.zfb.AliPayClientFactory;
 import com.cyksj.config.zfb.BaseZfbConfig;
 import com.cyksj.config.zfb.ZfbProductCode;
 import com.cyksj.dto.RedisKey;
@@ -857,7 +857,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				orderDon.setShopId(null);
 			}
 			//支付宝退款
-			AlipayClient alipayClient = AliPayCommon.getAlipayClient(shopConfigMapper.getByAppId(Optional.ofNullable(orderDon.getShopId()).orElse(ShopConfig.ZFB_DEFAULT_APP_ID)), false);
+			AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(Optional.ofNullable(orderDon.getShopId()).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
 			AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
 			AlipayTradeRefundModel model = new AlipayTradeRefundModel();
 			//支付宝交易号
@@ -1163,9 +1163,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			type = TransferConstant.ALIPAY;
 		}
 		Integer scope = transferAccountsReq.getScope();
-		ShopConfig shopConfig = shopConfigMapper.getByAppId(ShopConfig.ZFB_DEFAULT_APP_ID);
-
-		AlipayClient alipayClient = AliPayCommon.getAlipayClient(shopConfig, true);
+		AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(ShopConfig.ZFB_DEFAULT_APP_ID);
 
 		AlipayRequest alipayRequest = aliPayTransferAccountsRequest(donNo, account, name, money);
 
@@ -1182,8 +1180,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	@Override
 	public AlipayFundTransCommonQueryResponse getTransFerStatusByTid(String translationId) throws Exception {
-		ShopConfig shopConfig = shopConfigMapper.getByAppId(ShopConfig.ZFB_DEFAULT_APP_ID);
-		AlipayClient alipayClient = AliPayCommon.getAlipayClient(shopConfig, true);
+		AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(ShopConfig.ZFB_DEFAULT_APP_ID);
 		AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest();
 		AlipayFundTransCommonQueryModel model = new AlipayFundTransCommonQueryModel();
 		model.setOrderId(translationId);
@@ -1219,9 +1216,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 	}
 
 	public AliPayParams commonAliPay(Long orderId, String productCode, String appId, String qrPayMode) throws Exception {
-		ShopConfig shopConfig = shopConfigMapper.getByAppId(Optional.ofNullable(appId).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
-
-		AlipayClient alipayClient = AliPayCommon.getAlipayClient(shopConfig, false);
+		AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(Optional.ofNullable(appId).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
 		// 创建API对应的request
 		AlipayRequest alipayRequest = getAliAayRequest(orderId, productCode, qrPayMode);
 		if (alipayRequest == null) {