AliPayClientFactory.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.cyksj.config.zfb;
  2. import com.alipay.api.AlipayClient;
  3. import com.alipay.api.AlipayConfig;
  4. import com.alipay.api.DefaultAlipayClient;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.cyksj.common.exception.BusinessRuntimeException;
  7. import com.cyksj.mapper.channel.ShopConfigMapper;
  8. import com.cyksj.model.entity.ShopConfig;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import javax.annotation.PostConstruct;
  12. import java.util.List;
  13. import java.util.Map;
  14. import java.util.concurrent.ConcurrentHashMap;
  15. /*
  16. *项目名: netflix
  17. *文件名: AliPayClientFactory
  18. *创建者: JavaZou
  19. *创建时间:2022/11/2 11:18
  20. */
  21. @Component
  22. public class AliPayClientFactory {
  23. /**
  24. * 支付宝证书路径
  25. */
  26. private static final String ALIPAY_CERT_PATH = "cert/alipay";
  27. /**
  28. * 应用公钥证书名字
  29. */
  30. private static final String ALIPAY_APP_PUBLIC_CERT_NAME = "appCertPublicKey.crt";
  31. /**
  32. * 支付宝公钥证书名字
  33. */
  34. private static final String ALIPAY_PUBLIC_CERT_NAME = "alipayCertPublicKey_RSA2.crt";
  35. /**
  36. * 支付宝根证书名字
  37. */
  38. private static final String ALIPAY_ROOT_CERT_NAME = "alipayRootCert.crt";
  39. private static Map<String, AlipayClient> alipayClientMap = new ConcurrentHashMap<>();
  40. @Autowired
  41. private ShopConfigMapper shopConfigMapper;
  42. /**
  43. * 初始化
  44. */
  45. @PostConstruct
  46. public void initAliPayClient() {
  47. List<ShopConfig> zfbShopConfig = shopConfigMapper.selectList(Wrappers.lambdaQuery(ShopConfig.class)
  48. .eq(ShopConfig::getType, "zfb"));
  49. zfbShopConfig.forEach(config -> {
  50. AlipayConfig alipayConfig = new AlipayConfig();
  51. //网关地址
  52. alipayConfig.setServerUrl(BaseZfbConfig.url);
  53. alipayConfig.setAppId(config.getAppId());
  54. alipayConfig.setPrivateKey(config.getAppPrivateKey());
  55. alipayConfig.setFormat(BaseZfbConfig.format);
  56. alipayConfig.setCharset(BaseZfbConfig.charset);
  57. alipayConfig.setSignType(BaseZfbConfig.signType);
  58. if (config.getIsCert()) {
  59. String shopId = config.getAppId();
  60. // 设置应用公钥证书路径
  61. alipayConfig.setAppCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_APP_PUBLIC_CERT_NAME));
  62. // 设置支付宝公钥证书路径
  63. alipayConfig.setAlipayPublicCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_PUBLIC_CERT_NAME));
  64. // 设置支付宝根证书路径
  65. alipayConfig.setRootCertPath(String.format("%s/%s/%s", ALIPAY_CERT_PATH, shopId, ALIPAY_ROOT_CERT_NAME));
  66. }
  67. AlipayClient alipayClient = null;
  68. try {
  69. alipayClient = new DefaultAlipayClient(alipayConfig);
  70. } catch (Exception e) {
  71. return;
  72. }
  73. alipayClientMap.putIfAbsent(config.getAppId(), alipayClient);
  74. });
  75. }
  76. public static AlipayClient getAlipayClient(String shopId) {
  77. AlipayClient alipayClient = alipayClientMap.get(shopId);
  78. if (alipayClient == null) {
  79. throw BusinessRuntimeException.getInstance("未配置该支付宝商户");
  80. }
  81. return alipayClient;
  82. }
  83. }