From ec1f300c5316188f7dac2f6fcf05b326fadbe4e8 Mon Sep 17 00:00:00 2001 From: zhaogd Date: Sat, 1 Aug 2026 15:18:45 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=BE=AE=E4=BF=A1=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E7=A7=81=E9=92=A5=E4=BB=8E=E6=96=87=E4=BB=B6=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E6=94=B9=E4=B8=BAPEM=E5=86=85=E5=AE=B9=E5=AD=98?= =?UTF-8?q?=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - privateKeyPath → privateKey,数据库存PEM内容而非路径 - SDK调用从 privateKeyFromPath() 改为 privateKey() - application.yml/docker-compose.yml 环境变量同步改名 - web前端可直接粘贴或上传.pem文件内容 --- docker-compose.yml | 2 +- .../modules/payment/config/WechatPayConfig.java | 4 ++-- .../payment/entity/WechatPayConfigEntity.java | 4 ++-- .../service/impl/WechatPayServiceImpl.java | 16 ++++++++-------- src/main/resources/application.yml | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index f179b86..1fe4f68 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,7 +32,7 @@ services: - WECHAT_PAY_MCH_ID= - WECHAT_PAY_API_V3_KEY= - WECHAT_PAY_CERT_SERIAL_NO= - - WECHAT_PAY_PRIVATE_KEY_PATH= + - WECHAT_PAY_PRIVATE_KEY= - WECHAT_PAY_NOTIFY_URL= depends_on: - redis diff --git a/src/main/java/io/as/modules/payment/config/WechatPayConfig.java b/src/main/java/io/as/modules/payment/config/WechatPayConfig.java index 8939a96..4752258 100644 --- a/src/main/java/io/as/modules/payment/config/WechatPayConfig.java +++ b/src/main/java/io/as/modules/payment/config/WechatPayConfig.java @@ -20,8 +20,8 @@ public class WechatPayConfig { private String apiV3Key; /** 商户证书序列号 */ private String certSerialNo; - /** 商户私钥文件路径(apiclient_key.pem) */ - private String privateKeyPath; + /** 商户私钥(PEM 内容) */ + private String privateKey; /** 支付回调通知地址 */ private String notifyUrl; } diff --git a/src/main/java/io/as/modules/payment/entity/WechatPayConfigEntity.java b/src/main/java/io/as/modules/payment/entity/WechatPayConfigEntity.java index e60dd17..8cbe0a1 100644 --- a/src/main/java/io/as/modules/payment/entity/WechatPayConfigEntity.java +++ b/src/main/java/io/as/modules/payment/entity/WechatPayConfigEntity.java @@ -44,8 +44,8 @@ public class WechatPayConfigEntity implements Serializable { /** 证书序列号 */ private String certSerialNo; - /** 私钥文件路径 */ - private String privateKeyPath; + /** 商户私钥(PEM 内容) */ + private String privateKey; /** 回调通知URL */ private String notifyUrl; diff --git a/src/main/java/io/as/modules/payment/service/impl/WechatPayServiceImpl.java b/src/main/java/io/as/modules/payment/service/impl/WechatPayServiceImpl.java index 8adac29..9637fe4 100644 --- a/src/main/java/io/as/modules/payment/service/impl/WechatPayServiceImpl.java +++ b/src/main/java/io/as/modules/payment/service/impl/WechatPayServiceImpl.java @@ -68,7 +68,7 @@ public class WechatPayServiceImpl implements WechatPayService { @Autowired private JdbcTemplate jdbcTemplate; - /** SDK 配置缓存:按 mchId+certSerialNo+apiV3Key+privateKeyPath 缓存 */ + /** SDK 配置缓存:按 mchId+certSerialNo+apiV3Key+privateKey 缓存 */ private final ConcurrentHashMap sdkConfigCache = new ConcurrentHashMap<>(); // ==================== 支付下单 ==================== @@ -551,8 +551,8 @@ public class WechatPayServiceImpl implements WechatPayService { if (StringUtils.isBlank(getCertSerialNo(dbCfg))) { throw new ASException("微信支付配置缺少 certSerialNo"); } - if (StringUtils.isBlank(getPrivateKeyPath(dbCfg))) { - throw new ASException("微信支付配置缺少 privateKeyPath"); + if (StringUtils.isBlank(getPrivateKey(dbCfg))) { + throw new ASException("微信支付配置缺少 privateKey"); } if (StringUtils.isBlank(getNotifyUrl(dbCfg))) { throw new ASException("微信支付配置缺少 notifyUrl"); @@ -601,7 +601,7 @@ public class WechatPayServiceImpl implements WechatPayService { } /** - * 获取或创建 SDK 配置实例(按商户号+证书+密钥+私钥路径缓存) + * 获取或创建 SDK 配置实例(按商户号+证书+密钥+私钥缓存) */ private Config getOrCreateConfig(WechatPayConfigEntity cfg) { String cacheKey = buildCacheKey(cfg); @@ -617,7 +617,7 @@ public class WechatPayServiceImpl implements WechatPayService { logger.info("初始化微信支付 RSAAutoCertificateConfig: mchId={}", getMchId(cfg)); Config config = new RSAAutoCertificateConfig.Builder() .merchantId(getMchId(cfg)) - .privateKeyFromPath(getPrivateKeyPath(cfg)) + .privateKey(getPrivateKey(cfg)) .merchantSerialNumber(getCertSerialNo(cfg)) .apiV3Key(getApiV3Key(cfg)) .build(); @@ -627,7 +627,7 @@ public class WechatPayServiceImpl implements WechatPayService { } private String buildCacheKey(WechatPayConfigEntity cfg) { - return getMchId(cfg) + "|" + getCertSerialNo(cfg) + "|" + getApiV3Key(cfg) + "|" + getPrivateKeyPath(cfg); + return getMchId(cfg) + "|" + getCertSerialNo(cfg) + "|" + getApiV3Key(cfg) + "|" + getPrivateKey(cfg); } private String getAppId(WechatPayConfigEntity cfg) { @@ -646,8 +646,8 @@ public class WechatPayServiceImpl implements WechatPayService { return cfg != null && StringUtils.isNotBlank(cfg.getCertSerialNo()) ? cfg.getCertSerialNo() : wechatPayConfig.getCertSerialNo(); } - private String getPrivateKeyPath(WechatPayConfigEntity cfg) { - return cfg != null && StringUtils.isNotBlank(cfg.getPrivateKeyPath()) ? cfg.getPrivateKeyPath() : wechatPayConfig.getPrivateKeyPath(); + private String getPrivateKey(WechatPayConfigEntity cfg) { + return cfg != null && StringUtils.isNotBlank(cfg.getPrivateKey()) ? cfg.getPrivateKey() : wechatPayConfig.getPrivateKey(); } private String getNotifyUrl(WechatPayConfigEntity cfg) { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index d4899a4..fb37cac 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -85,7 +85,7 @@ renren: mch-id: ${WECHAT_PAY_MCH_ID:} api-v3-key: ${WECHAT_PAY_API_V3_KEY:} cert-serial-no: ${WECHAT_PAY_CERT_SERIAL_NO:} - private-key-path: ${WECHAT_PAY_PRIVATE_KEY_PATH:} + private-key: ${WECHAT_PAY_PRIVATE_KEY:} notify-url: ${WECHAT_PAY_NOTIFY_URL:} # 橘视厅媒资接口配置(对应 Android 端 ApiConfig.kt)