mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-09 22:45:58 +08:00
refactor(risk): 用户可见文案统一为「用户标识」(兼容支付宝 userId 语义)
- PayRiskOpenIdLevelEnum/PlatformPaySecurityConfig 等用户可见注释与 Schema description: 'openId 拦截级别' → '用户标识拦截级别' - 3 处主链路 service(AggregatePayService/CashierPayService/CodePayAssistService) 方法注释统一术语 - 后端 validation.json × 10 语种文案同步调整 - 技术字段名(riskOpenIdLevel/hasOpenIdBlacklist/isEnhancedOpenIdLevel)保留, 维持 API/接口兼容
This commit is contained in:
@@ -39,7 +39,7 @@ public class AggregatePayService {
|
||||
private final GatewayAggregateConfigManager aggregateConfigManager;
|
||||
/// 风控检查器(可选 SPI:用于判断是否存在 openId 黑名单, 决定是否触发强制 OAuth)
|
||||
private final ObjectProvider<PayRiskChecker> payRiskCheckerProvider;
|
||||
/// 平台安全配置(读取 openId 拦截级别, 决定 NORMAL 模式下不触发强制 OAuth)
|
||||
/// 平台安全配置(读取用户标识拦截级别, 决定 NORMAL 模式下不触发强制 OAuth)
|
||||
private final PlatformSecurityConfigService platformSecurityConfigService;
|
||||
|
||||
/// H5 聚合元数据: autoLaunch / needOpenId(不下发敏感路由字段)
|
||||
@@ -83,9 +83,9 @@ public class AggregatePayService {
|
||||
/// openId 触发判定
|
||||
///
|
||||
/// 1. JSAPI/MINI 类方式: 业务必需, 永远 true(与历史行为一致)
|
||||
/// 2. 主扫/H5 等免 openId 方式: 仅当 openId 拦截级别为 ENHANCED,
|
||||
/// 且存在 openId 黑名单, 且当前 clientEnv 可 OAuth 时 true,
|
||||
/// 实现 openId 黑名单在聚合网关内的全局拦截
|
||||
/// 2. 主扫/H5 等免用户标识方式: 仅当用户标识拦截级别为 ENHANCED,
|
||||
/// 且存在用户标识黑名单, 且当前 clientEnv 可 OAuth 时 true,
|
||||
/// 实现用户标识黑名单在聚合网关内的全局拦截
|
||||
private boolean resolveNeedOpenId(String method, ClientEnvEnum clientEnv) {
|
||||
if (PayMethodOpenIdSupport.needsOpenId(method)) {
|
||||
return true;
|
||||
@@ -97,7 +97,7 @@ public class AggregatePayService {
|
||||
return PayMethodOpenIdSupport.canAcquireOpenId(method, clientEnv);
|
||||
}
|
||||
|
||||
/// openId 拦截级别是否为增强模式(NORMAL 时跳过强制 OAuth, 保留用户体验)
|
||||
/// 用户标识拦截级别是否为增强模式(NORMAL 时跳过强制 OAuth, 保留用户体验)
|
||||
private boolean isEnhancedOpenIdLevel() {
|
||||
String level = platformSecurityConfigService.getPaySecurityConfig().getRiskOpenIdLevel();
|
||||
return PayRiskOpenIdLevelEnum.ENHANCED.getCode().equals(level);
|
||||
|
||||
@@ -50,7 +50,7 @@ public class CashierPayService {
|
||||
private final GatewayCashierItemManager gatewayCashierItemManager;
|
||||
/// 风控检查器(可选 SPI:用于判断是否存在 openId 黑名单, 决定是否触发强制 OAuth)
|
||||
private final ObjectProvider<PayRiskChecker> payRiskCheckerProvider;
|
||||
/// 平台安全配置(读取 openId 拦截级别, 决定 NORMAL 模式下不触发强制 OAuth)
|
||||
/// 平台安全配置(读取用户标识拦截级别, 决定 NORMAL 模式下不触发强制 OAuth)
|
||||
private final PlatformSecurityConfigService platformSecurityConfigService;
|
||||
|
||||
/// 公开支付项列表(落地页展示)
|
||||
@@ -172,8 +172,8 @@ public class CashierPayService {
|
||||
/// openId 触发判定(与聚合/码牌同源逻辑)
|
||||
///
|
||||
/// 1. JSAPI/MINI 类方式: 业务必需, 永远 true
|
||||
/// 2. 主扫/H5 等免 openId 方式: 仅当 openId 拦截级别为 ENHANCED,
|
||||
/// 且存在 openId 黑名单且当前 clientEnv 可 OAuth 时 true
|
||||
/// 2. 主扫/H5 等免用户标识方式: 仅当用户标识拦截级别为 ENHANCED,
|
||||
/// 且存在用户标识黑名单且当前 clientEnv 可 OAuth 时 true
|
||||
private boolean resolveItemNeedOpenId(String method, ClientEnvEnum clientEnv) {
|
||||
if (PayMethodOpenIdSupport.needsOpenId(method)) {
|
||||
return true;
|
||||
@@ -185,7 +185,7 @@ public class CashierPayService {
|
||||
return PayMethodOpenIdSupport.canAcquireOpenId(method, clientEnv);
|
||||
}
|
||||
|
||||
/// openId 拦截级别是否为增强模式(NORMAL 时跳过强制 OAuth, 保留用户体验)
|
||||
/// 用户标识拦截级别是否为增强模式(NORMAL 时跳过强制 OAuth, 保留用户体验)
|
||||
private boolean isEnhancedOpenIdLevel() {
|
||||
String level = platformSecurityConfigService.getPaySecurityConfig().getRiskOpenIdLevel();
|
||||
return PayRiskOpenIdLevelEnum.ENHANCED.getCode().equals(level);
|
||||
|
||||
@@ -66,7 +66,7 @@ public class CodePayAssistService {
|
||||
private final NormalPayOrderManager normalPayOrderManager;
|
||||
/// 风控检查器(可选 SPI:用于判断是否存在 openId 黑名单, 决定是否触发强制 OAuth)
|
||||
private final ObjectProvider<PayRiskChecker> payRiskCheckerProvider;
|
||||
/// 平台安全配置(读取 openId 拦截级别, 决定 NORMAL 模式下不触发强制 OAuth)
|
||||
/// 平台安全配置(读取用户标识拦截级别, 决定 NORMAL 模式下不触发强制 OAuth)
|
||||
private final PlatformSecurityConfigService platformSecurityConfigService;
|
||||
|
||||
/// 根据码牌编码查询支付信息(公开接口, 脱敏返回)
|
||||
@@ -272,9 +272,9 @@ public class CodePayAssistService {
|
||||
/// openId 触发判定
|
||||
///
|
||||
/// 1. JSAPI/MINI 类方式: 业务必需, 永远 true(与历史行为一致)
|
||||
/// 2. 主扫/H5 等免 openId 方式: 仅当 openId 拦截级别为 ENHANCED,
|
||||
/// 且存在 openId 黑名单且当前 clientEnv 可 OAuth 时 true,
|
||||
/// 实现 openId 黑名单在码牌场景的全局拦截
|
||||
/// 2. 主扫/H5 等免用户标识方式: 仅当用户标识拦截级别为 ENHANCED,
|
||||
/// 且存在用户标识黑名单且当前 clientEnv 可 OAuth 时 true,
|
||||
/// 实现用户标识黑名单在码牌场景的全局拦截
|
||||
private boolean resolveNeedOpenId(String method, ClientEnvEnum clientEnv) {
|
||||
if (PayMethodOpenIdSupport.needsOpenId(method)) {
|
||||
return true;
|
||||
@@ -286,7 +286,7 @@ public class CodePayAssistService {
|
||||
return PayMethodOpenIdSupport.canAcquireOpenId(method, clientEnv);
|
||||
}
|
||||
|
||||
/// openId 拦截级别是否为增强模式(NORMAL 时跳过强制 OAuth, 保留用户体验)
|
||||
/// 用户标识拦截级别是否为增强模式(NORMAL 时跳过强制 OAuth, 保留用户体验)
|
||||
private boolean isEnhancedOpenIdLevel() {
|
||||
String level = platformSecurityConfigService.getPaySecurityConfig().getRiskOpenIdLevel();
|
||||
return PayRiskOpenIdLevelEnum.ENHANCED.getCode().equals(level);
|
||||
|
||||
@@ -792,7 +792,7 @@
|
||||
"notNull": "Post-pay logging toggle cannot be empty"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "openId interception level cannot be empty"
|
||||
"notNull": "User identifier interception level cannot be empty"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "Overseas IP block toggle cannot be empty"
|
||||
|
||||
@@ -799,7 +799,7 @@
|
||||
"notNull": "Pilihan pemeriksaan setelah pembayaran wajib diisi"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "Level intercept openId tidak boleh kosong"
|
||||
"notNull": "Level intersepsi identifier pengguna tidak boleh kosong"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "Saklar blokir IP luar negeri tidak boleh kosong"
|
||||
|
||||
@@ -792,7 +792,7 @@
|
||||
"notNull": "決済後記録スイッチは必須です"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "openId ブロック レベルは必須です"
|
||||
"notNull": "ユーザー識別子ブロック レベルは必須です"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "海外 IP ブロック スイッチは必須です"
|
||||
|
||||
@@ -792,7 +792,7 @@
|
||||
"notNull": "결제 후 기록 스위치는 필수입니다"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "openId 차단 레벨은 필수입니다"
|
||||
"notNull": "사용자 식별자 차단 레벨은 필수입니다"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "해외 IP 차단 스위치는 필수입니다"
|
||||
|
||||
@@ -799,7 +799,7 @@
|
||||
"notNull": "Pilihan semakan selepas pembayaran tidak boleh kosong"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "Tahap sekatan openId tidak boleh kosong"
|
||||
"notNull": "Tahap sekatan pengecam pengguna tidak boleh kosong"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "Suis sekatan IP luar negara tidak boleh kosong"
|
||||
|
||||
@@ -799,7 +799,7 @@
|
||||
"notNull": "ตัวเลือกการตรวจสอบหลังชำระเงินต้องไม่เป็นค่าว่าง"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "ระดับการบล็อก openId ต้องไม่ว่าง"
|
||||
"notNull": "ระดับการบล็อกตัวระบุผู้ใช้ต้องไม่ว่าง"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "สวิตช์บล็อก IP ต่างประเทศต้องไม่ว่าง"
|
||||
|
||||
@@ -799,7 +799,7 @@
|
||||
"notNull": "Tùy chọn kiểm tra sau thanh toán là bắt buộc"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "Cấp độ chặn openId không được để trống"
|
||||
"notNull": "Cấp độ chặn mã định danh người dùng không được để trống"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "Công tắc chặn IP nước ngoài không được để trống"
|
||||
|
||||
@@ -792,7 +792,7 @@
|
||||
"notNull": "事后补录开关不能为空"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "openId 拦截级别不能为空"
|
||||
"notNull": "用户标识拦截级别不能为空"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "海外 IP 拦截开关不能为空"
|
||||
|
||||
@@ -792,7 +792,7 @@
|
||||
"notNull": "事後補錄開關不能為空"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "openId 攔截級別不能為空"
|
||||
"notNull": "使用者識別碼攔截級別不能為空"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "海外 IP 攔截開關不能為空"
|
||||
|
||||
@@ -792,7 +792,7 @@
|
||||
"notNull": "事後補錄開關不能為空"
|
||||
},
|
||||
"riskOpenIdLevel": {
|
||||
"notNull": "openId 攔截級別不能為空"
|
||||
"notNull": "使用者識別碼攔截級別不能為空"
|
||||
},
|
||||
"blockOverseasIp": {
|
||||
"notNull": "海外 IP 攔截開關不能為空"
|
||||
|
||||
@@ -13,7 +13,7 @@ import lombok.experimental.Accessors;
|
||||
/// - 风控总开关: 关闭后支付主链路跳过所有风控检查
|
||||
/// - 命中阻断: 支付前命中黑名单是否拒绝下单(关闭则仅记录不拦截)
|
||||
/// - 事后补录: 支付成功后是否补充记录命中(用于事后分析,不阻断资金态)
|
||||
/// - openId 拦截级别: 是否对 H5 / 主扫等免 openId 方式强制 OAuth, 见 [PayRiskOpenIdLevelEnum]
|
||||
/// - 用户标识拦截级别: 是否对 H5 / 主扫等免用户标识方式强制 OAuth, 见 [PayRiskOpenIdLevelEnum]
|
||||
/// - 海外 IP 拦截: 占位字段, 后续接入 IP 地理位置库后实现
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@@ -28,7 +28,7 @@ public class PlatformPaySecurityConfig {
|
||||
/// 支付成功后是否补录命中(用于事后分析)
|
||||
private Boolean riskCheckAfterPay = Boolean.TRUE;
|
||||
|
||||
/// openId 拦截级别(默认增强拦截, 保持历史行为)
|
||||
/// 用户标识拦截级别(默认增强拦截, 保持历史行为)
|
||||
/// @see PayRiskOpenIdLevelEnum
|
||||
private String riskOpenIdLevel = PayRiskOpenIdLevelEnum.ENHANCED.getCode();
|
||||
|
||||
|
||||
@@ -7,20 +7,20 @@ import lombok.RequiredArgsConstructor;
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
|
||||
/// # openId 拦截级别
|
||||
/// # 用户标识拦截级别
|
||||
///
|
||||
/// 控制 openId 黑名单对「原本免 openId 支付方式(H5 / 主扫)」是否触发强制 OAuth。
|
||||
/// JSAPI / 小程序原生方式业务本身就要 openId, 不受此开关影响。
|
||||
/// 控制用户标识黑名单(微信 openId / 支付宝 userId 等)对「原本免用户标识支付方式(H5 / 主扫)」
|
||||
/// 是否触发强制 OAuth。JSAPI / 小程序原生方式业务本身就要用户标识, 不受此开关影响。
|
||||
///
|
||||
/// - [NORMAL]: 仅做 IP + 事后补录, 不为风控额外触发 OAuth(保留用户体验)
|
||||
/// - [ENHANCED]: 存在 openId 名单时, 对 H5 / 主扫等可 OAuth 方式强制静默授权
|
||||
/// - [ENHANCED]: 存在用户标识名单时, 对 H5 / 主扫等可 OAuth 方式强制静默授权
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public enum PayRiskOpenIdLevelEnum implements I18nSupport {
|
||||
|
||||
/// 正常拦截(仅 IP + 事后补录)
|
||||
NORMAL("normal"),
|
||||
/// 增强拦截(对 H5 / 主扫强制 OAuth)
|
||||
/// 增强拦截(对 H5 / 主扫强制 OAuth 取用户标识)
|
||||
ENHANCED("enhanced");
|
||||
|
||||
private final String code;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class PlatformPaySecurityConfigParam {
|
||||
@NotNull(message = "{validation.field.riskCheckAfterPay.notNull}")
|
||||
private Boolean riskCheckAfterPay;
|
||||
|
||||
@Schema(description = "openId 拦截级别(normal=正常拦截 / enhanced=增强拦截)")
|
||||
@Schema(description = "用户标识拦截级别(normal=正常拦截 / enhanced=增强拦截)")
|
||||
@NotNull(message = "{validation.field.riskOpenIdLevel.notNull}")
|
||||
private String riskOpenIdLevel;
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ public class PlatformPaySecurityConfigResult extends BaseResult {
|
||||
@Schema(description = "支付成功后是否补录命中(用于事后分析)")
|
||||
private Boolean riskCheckAfterPay;
|
||||
|
||||
@Schema(description = "openId 拦截级别(normal=正常拦截 / enhanced=增强拦截)")
|
||||
@Schema(description = "用户标识拦截级别(normal=正常拦截 / enhanced=增强拦截)")
|
||||
private String riskOpenIdLevel;
|
||||
|
||||
@Schema(description = "海外 IP 拦截(占位字段, 默认关闭, 后续接入)")
|
||||
|
||||
Reference in New Issue
Block a user