fix(route): 环境不匹配改抛 channelMchEnvMismatch 带参, 替代 noMatch 提升可诊断性

This commit is contained in:
daxpay
2026-08-04 20:42:25 +08:00
parent 2e465315b4
commit 0072fb050d
11 changed files with 24 additions and 13 deletions

View File

@@ -90,7 +90,7 @@ public class PayRouteService {
/// 1. 启停用校验: 禁用的通道商户不允许被路由命中, 与配置保存时([PayRouteBasicConfigService]/[PayRouteSceneConfigService])保持一致
/// 2. 环境一致性校验: 通道商户固化的 sandbox 标识必须与产品当前生效环境(activeEnv)匹配。
/// 沙箱产品 → 只能路由到 sandbox 通道商户; 生产产品 → 只能路由到 prod 通道商户。
/// 不匹配抛 noMatch(等价"无可用的支付产品", 实现沙箱/生产路由层隔离)。
/// 不匹配抛 channelMchEnvMismatch(明确告知调用方通道商户与产品环境不一致, 便于排查配置问题)。
/// 注意: 通道商户 sandbox 在创建时固化, 不随产品环境切换改变; 一个产品下可同时存在两种商户。
private void validateChannelMchEnvMatch(String channelMchNo, String product) {
if (StrUtil.isBlank(channelMchNo) || StrUtil.isBlank(product)) {
@@ -110,8 +110,9 @@ public class PayRouteService {
if (mchSandbox != prodSandbox) {
log.info("通道商户[{}]固化环境(sandbox={})与产品[{}]当前生效环境(sandbox={})不匹配, 路由拒绝",
channelMchNo, mchSandbox, product, prodSandbox);
// 路由: 未匹配到可用支付产品(沙箱/生产环境不匹配)
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "pay.route.error.noMatch");
// 路由: 通道商户环境与产品当前生效环境不一致(明确告知调用方, 便于排查配置问题)
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR,
"pay.route.error.channelMchEnvMismatch", channelMchNo, product);
}
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "For pay method [{0}], select both channel merchant and capability, or leave both empty",
"basicChannelMchNotConfigured": "No channel merchant configured for pay brand [{0}]; configure it under channel routing By Brand Default",
"sceneCapabilityChannelMchMismatch": "Capability [{0}] does not match channel merchant [{1}] and method [{2}]",
"directCapabilityChannelMchMismatch": "Capability [{0}] does not match channel merchant [{1}]"
"directCapabilityChannelMchMismatch": "Capability [{0}] does not match channel merchant [{1}]",
"channelMchEnvMismatch": "The sandbox flag of channel merchant [{0}] does not match the active environment of product [{1}]. Please check the channel merchant configuration."
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "Untuk metode pembayaran [{0}], pilih pedagang saluran dan kemampuan, atau biarkan keduanya kosong",
"basicChannelMchNotConfigured": "Tidak ada pedagang saluran yang dikonfigurasi untuk merek pembayaran [{0}]; konfigurasikan di bawah perutean saluran Berdasarkan Default Merek",
"sceneCapabilityChannelMchMismatch": "Kemampuan [{0}] tidak cocok dengan saluran pedagang [{1}] dan metode [{2}]",
"directCapabilityChannelMchMismatch": "Kemampuan [{0}] tidak cocok dengan pedagang saluran [{1}]"
"directCapabilityChannelMchMismatch": "Kemampuan [{0}] tidak cocok dengan pedagang saluran [{1}]",
"channelMchEnvMismatch": "Flag sandbox pedagang saluran [{0}] tidak cocok dengan lingkungan aktif produk [{1}]. Silakan periksa konfigurasi pedagang saluran"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "支払い方法 [{0}] については、チャネル販売者と機能の両方を選択するか、両方を空のままにしてください",
"basicChannelMchNotConfigured": "有料ブランド [{0}] に対してチャネル販売者が設定されていません。ブランドデフォルトによるチャネルルーティングの下で​​設定します",
"sceneCapabilityChannelMchMismatch": "機能 [{0}] がチャネル販売者 [{1}] およびメソッド [{2}] と一致しません",
"directCapabilityChannelMchMismatch": "能力 [{0}] がチャネル販売者 [{1}] と一致しません"
"directCapabilityChannelMchMismatch": "能力 [{0}] がチャネル販売者 [{1}] と一致しません",
"channelMchEnvMismatch": "チャネル販売者[{0}]のサンドボックス環境フラグが製品[{1}]の現在の有効環境と一致しません。チャネル販売者設定を確認してください"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "결제 방법 [{0}]의 경우 채널 판매자와 기능을 모두 선택하거나 둘 다 비워 두세요.",
"basicChannelMchNotConfigured": "유료 브랜드 [{0}]에 구성된 채널 판매자가 없습니다. 브랜드 기본값으로 채널 라우팅에서 구성",
"sceneCapabilityChannelMchMismatch": "기능 [{0}]이 채널 판매자 [{1}] 및 방법 [{2}]과 일치하지 않습니다.",
"directCapabilityChannelMchMismatch": "기능 [{0}]이 채널 판매자 [{1}]와 일치하지 않습니다."
"directCapabilityChannelMchMismatch": "기능 [{0}]이 채널 판매자 [{1}]와 일치하지 않습니다.",
"channelMchEnvMismatch": "채널 판매자[{0}]의 샌드박스 환경 플래그가 상품[{1}]의 현재 활성 환경과 일치하지 않습니다. 채널 판매자 설정을 확인해 주세요."
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "Untuk kaedah bayar [{0}], pilih kedua-dua pedagang saluran dan keupayaan, atau biarkan kedua-duanya kosong",
"basicChannelMchNotConfigured": "Tiada pedagang saluran dikonfigurasikan untuk jenama berbayar [{0}]; konfigurasikannya di bawah penghalaan saluran Mengikut Lalai Jenama",
"sceneCapabilityChannelMchMismatch": "Keupayaan [{0}] tidak sepadan dengan pedagang saluran [{1}] dan kaedah [{2}]",
"directCapabilityChannelMchMismatch": "Keupayaan [{0}] tidak sepadan dengan pedagang saluran [{1}]"
"directCapabilityChannelMchMismatch": "Keupayaan [{0}] tidak sepadan dengan pedagang saluran [{1}]",
"channelMchEnvMismatch": "Bendera persekitaran sandbox pedagang saluran [{0}] tidak sepadan dengan persekitaran aktif produk [{1}]. Sila semak konfigurasi pedagang saluran"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "สำหรับวิธีการชำระเงิน [{0}] ให้เลือกทั้งช่องทางผู้ค้าและความสามารถ หรือปล่อยว่างไว้ทั้งสองรายการ",
"basicChannelMchNotConfigured": "ไม่มีผู้ขายช่องทางที่กำหนดค่าสำหรับแบรนด์แบบชำระเงิน [{0}]; กำหนดค่าภายใต้การกำหนดเส้นทางช่องสัญญาณตามค่าเริ่มต้นของแบรนด์",
"sceneCapabilityChannelMchMismatch": "ความสามารถ [{0}] ไม่ตรงกับผู้ขายของช่องทาง [{1}] และวิธีการ [{2}]",
"directCapabilityChannelMchMismatch": "ความสามารถ [{0}] ไม่ตรงกับผู้ขายของช่องทาง [{1}]"
"directCapabilityChannelMchMismatch": "ความสามารถ [{0}] ไม่ตรงกับผู้ขายของช่องทาง [{1}]",
"channelMchEnvMismatch": "แฟล็กสภาพแวดล้อมแซนด์บ็อกซ์ของผู้ขายช่องทาง [{0}] ไม่ตรงกับสภาพแวดล้อมที่ใช้งานอยู่ของผลิตภัณฑ์ [{1}] กรุณาตรวจสอบการตั้งค่าผู้ขายช่องทาง"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "Đối với phương thức thanh toán [{0}], hãy chọn cả người bán kênh và khả năng hoặc để trống cả hai",
"basicChannelMchNotConfigured": "Không có người bán kênh nào được định cấu hình cho thương hiệu trả phí [{0}]; định cấu hình nó theo định tuyến kênh Theo mặc định của thương hiệu",
"sceneCapabilityChannelMchMismatch": "Khả năng [{0}] không khớp với người bán kênh [{1}] và phương thức [{2}]",
"directCapabilityChannelMchMismatch": "Khả năng [{0}] không khớp với người bán kênh [{1}]"
"directCapabilityChannelMchMismatch": "Khả năng [{0}] không khớp với người bán kênh [{1}]",
"channelMchEnvMismatch": "Cờ môi trường sandbox của người bán kênh [{0}] không khớp với môi trường đang hoạt động của sản phẩm [{1}]. Vui lòng kiểm tra cấu hình người bán kênh"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "支付方式[{0}]须同时选择通道商户与支付能力,或同时留空",
"basicChannelMchNotConfigured": "支付渠道[{0}]未配置通道商户,请在通道路由「按渠道默认」中完成配置",
"sceneCapabilityChannelMchMismatch": "支付能力[{0}]与通道商户[{1}]、支付方式[{2}]不匹配",
"directCapabilityChannelMchMismatch": "支付能力[{0}]与通道商户[{1}]不匹配"
"directCapabilityChannelMchMismatch": "支付能力[{0}]与通道商户[{1}]不匹配",
"channelMchEnvMismatch": "通道商户[{0}]的沙箱环境标识与产品[{1}]当前生效环境不一致,请检查通道商户配置"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "支付方式[{0}]須同時選擇通道商户與支付能力,或同時留空",
"basicChannelMchNotConfigured": "支付渠道[{0}]未配置通道商户,請在通道路由「按渠道默認」中完成配置",
"sceneCapabilityChannelMchMismatch": "支付能力[{0}]與通道商户[{1}]、支付方式[{2}]不匹配",
"directCapabilityChannelMchMismatch": "支付能力[{0}]與通道商户[{1}]不匹配"
"directCapabilityChannelMchMismatch": "支付能力[{0}]與通道商户[{1}]不匹配",
"channelMchEnvMismatch": "通道商户[{0}]的沙盒環境標識與產品[{1}]目前生效環境不一致,請檢查通道商户配置"
}

View File

@@ -21,5 +21,6 @@
"sceneChannelMchCapabilityPair": "支付方式[{0}]須同時選擇通道商戶與支付能力,或同時留空",
"basicChannelMchNotConfigured": "支付渠道[{0}]未配置通道商戶,請在通道路由「按渠道預設」中完成配置",
"sceneCapabilityChannelMchMismatch": "支付能力[{0}]與通道商戶[{1}]、支付方式[{2}]不匹配",
"directCapabilityChannelMchMismatch": "支付能力[{0}]與通道商戶[{1}]不匹配"
"directCapabilityChannelMchMismatch": "支付能力[{0}]與通道商戶[{1}]不匹配",
"channelMchEnvMismatch": "通道商戶[{0}]的沙盒環境標識與產品[{1}]目前生效環境不一致,請檢查通道商戶設定"
}