mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-09 14:36:00 +08:00
refactor(channel): 移除通道应用认证配置中的授权回调地址字段
OAuth 回调由平台网关统一生成,不再由微信/支付宝/抖音应用级配置。
This commit is contained in:
@@ -58,7 +58,7 @@ COMMENT ON COLUMN wechat_isv_channel_merchant.auth_app_type IS '认证应用类
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 微信服务商通道商户应用授权认证配置表
|
||||
-- 配置服务商通道商户应用(子商户应用)的应用密钥和授权回调地址, 用于微信OAuth授权流程中的身份验证与回调跳转
|
||||
-- 配置服务商通道商户应用(子商户应用)的应用密钥, 用于微信OAuth授权流程中的身份验证
|
||||
-- 一个应用对应一份授权配置(由唯一约束 channel_mch_no + wechat_isv_mch_app_id 保证)
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS wechat_isv_mch_app_auth_config (
|
||||
@@ -66,7 +66,6 @@ CREATE TABLE IF NOT EXISTS wechat_isv_mch_app_auth_config (
|
||||
channel_mch_no varchar(32) NOT NULL,
|
||||
wechat_isv_mch_app_id int8 NOT NULL,
|
||||
app_secret varchar(255),
|
||||
auth_callback_url varchar(255),
|
||||
mch_no varchar(32),
|
||||
creator int8,
|
||||
create_time timestamptz(6),
|
||||
@@ -82,7 +81,6 @@ COMMENT ON COLUMN wechat_isv_mch_app_auth_config.id IS '主键';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.channel_mch_no IS '通道商户号(服务商特约商户)';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.wechat_isv_mch_app_id IS '关联服务商通道商户应用ID';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.app_secret IS '应用密钥(加密存储)';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.auth_callback_url IS '授权回调地址';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.mch_no IS '商户号';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.creator IS '创建者ID';
|
||||
COMMENT ON COLUMN wechat_isv_mch_app_auth_config.create_time IS '创建时间';
|
||||
|
||||
@@ -13,7 +13,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 支付宝直连商户应用授权认证配置
|
||||
///
|
||||
/// 配置直连商户应用的用户标识类型和授权回调地址,用于支付宝用户授权流程中的身份识别与回调跳转。
|
||||
/// 配置直连商户应用的用户标识类型,用于支付宝用户授权流程中的身份识别。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -32,9 +32,6 @@ public class AlipayDirectAppAuthConfig extends MchBaseEntity implements ToResult
|
||||
/// 用户标识类型
|
||||
private String userIdType;
|
||||
|
||||
/// 授权回调地址
|
||||
private String authCallbackUrl;
|
||||
|
||||
/// 转换
|
||||
@Override
|
||||
public AlipayDirectAppAuthConfigResult toResult() {
|
||||
|
||||
@@ -13,7 +13,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 支付宝服务商应用授权认证配置
|
||||
///
|
||||
/// 配置服务商应用的用户标识类型和授权回调地址,用于支付宝用户授权流程中的身份识别与回调跳转。
|
||||
/// 配置服务商应用的用户标识类型,用于支付宝用户授权流程中的身份识别。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -28,9 +28,6 @@ public class AlipayIsvAppAuthConfig extends MpBaseEntity implements ToResult<Ali
|
||||
/// 用户标识类型
|
||||
private String userIdType;
|
||||
|
||||
/// 授权回调地址
|
||||
private String authCallbackUrl;
|
||||
|
||||
/// 转换
|
||||
@Override
|
||||
public AlipayIsvAppAuthConfigResult toResult() {
|
||||
|
||||
@@ -3,13 +3,12 @@ package cn.daxpay.open.channel.alipay.param.direct;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/// # 支付宝直连商户应用授权认证配置保存参数
|
||||
///
|
||||
/// 保存/更新支付宝直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、用户标识类型和授权回调地址。
|
||||
/// 保存/更新支付宝直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、用户标识类型。
|
||||
///
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@@ -31,9 +30,4 @@ public class AlipayDirectAppAuthConfigParam {
|
||||
@NotBlank(message = "{validation.field.userIdType.notBlank}")
|
||||
@Schema(description = "用户标识类型")
|
||||
private String userIdType;
|
||||
|
||||
@NotBlank(message = "{validation.field.authCallbackUrl.notBlank}")
|
||||
@Size(max = 512, message = "{validation.field.authCallbackUrl.size}")
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -3,13 +3,12 @@ package cn.daxpay.open.channel.alipay.param.isv;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/// # 支付宝服务商应用授权认证配置保存参数
|
||||
///
|
||||
/// 保存/更新支付宝服务商应用授权认证配置时接收的请求参数,含应用ID、用户标识类型和授权回调地址。
|
||||
/// 保存/更新支付宝服务商应用授权认证配置时接收的请求参数,含应用ID、用户标识类型。
|
||||
///
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@@ -23,9 +22,4 @@ public class AlipayIsvAppAuthConfigParam {
|
||||
@NotBlank(message = "{validation.field.userIdType.notBlank}")
|
||||
@Schema(description = "用户标识类型")
|
||||
private String userIdType;
|
||||
|
||||
@NotBlank(message = "{validation.field.authCallbackUrl.notBlank}")
|
||||
@Size(max = 512, message = "{validation.field.authCallbackUrl.size}")
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 支付宝直连商户应用授权认证配置
|
||||
///
|
||||
/// 支付宝直连商户应用授权认证配置的返回结果对象,含商户号、通道商户号,以及用户标识类型和授权回调地址。
|
||||
/// 支付宝直连商户应用授权认证配置的返回结果对象,含商户号、通道商户号,以及用户标识类型。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -27,7 +27,4 @@ public class AlipayDirectAppAuthConfigResult extends BaseResult {
|
||||
|
||||
@Schema(description = "用户标识类型")
|
||||
private String userIdType;
|
||||
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 支付宝服务商应用授权认证配置
|
||||
///
|
||||
/// 支付宝服务商应用授权认证配置的返回结果对象,包含用户标识类型和授权回调地址。
|
||||
/// 支付宝服务商应用授权认证配置的返回结果对象,包含用户标识类型。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -23,8 +23,4 @@ public class AlipayIsvAppAuthConfigResult extends BaseResult {
|
||||
/// 用户标识类型
|
||||
@Schema(description = "用户标识类型")
|
||||
private String userIdType;
|
||||
|
||||
/// 授权回调地址
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,6 @@ public class AlipayDirectAppAuthConfigService {
|
||||
this.validateUserIdType(param.getUserIdType());
|
||||
var config = this.findByAlipayDirectAppId(param.getAlipayDirectAppId());
|
||||
config.setUserIdType(param.getUserIdType());
|
||||
config.setAuthCallbackUrl(param.getAuthCallbackUrl());
|
||||
alipayDirectAppAuthConfigManager.updateById(config);
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@ public class AlipayIsvAppAuthConfigService {
|
||||
this.validateUserIdType(param.getUserIdType());
|
||||
var config = this.findByAlipayIsvAppId(param.getAlipayIsvAppId());
|
||||
config.setUserIdType(param.getUserIdType());
|
||||
config.setAuthCallbackUrl(param.getAuthCallbackUrl());
|
||||
alipayIsvAppAuthConfigManager.updateById(config);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 抖音直连商户应用授权认证配置
|
||||
///
|
||||
/// 配置直连商户应用的应用密钥和授权回调地址,用于抖音用户授权流程中的身份验证与回调跳转。
|
||||
/// 配置直连商户应用的应用密钥,用于抖音用户授权流程中的身份验证。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -34,9 +34,6 @@ public class DouyinDirectAppAuthConfig extends MchBaseEntity implements ToResult
|
||||
@TableField(typeHandler = DataEncryptTypeHandler.class)
|
||||
private String appSecret;
|
||||
|
||||
/// 授权回调地址
|
||||
private String authCallbackUrl;
|
||||
|
||||
/// 转换
|
||||
@Override
|
||||
public DouyinDirectAppAuthConfigResult toResult() {
|
||||
|
||||
@@ -9,7 +9,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 抖音直连商户应用授权认证配置保存参数
|
||||
///
|
||||
/// 保存/更新抖音直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥和授权回调地址。
|
||||
/// 保存/更新抖音直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥。
|
||||
///
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@@ -31,8 +31,4 @@ public class DouyinDirectAppAuthConfigParam {
|
||||
@Size(max = 512, message = "{validation.field.appSecret.size}")
|
||||
@Schema(description = "应用密钥")
|
||||
private String appSecret;
|
||||
|
||||
@Size(max = 512, message = "{validation.field.authCallbackUrl.size}")
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,4 @@ public class DouyinDirectAppAuthConfigResult extends MchBaseResult {
|
||||
@SensitiveInfo
|
||||
@Schema(description = "应用密钥 (已脱敏)")
|
||||
private String appSecret;
|
||||
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,6 @@ public class DouyinDirectAppAuthConfigService {
|
||||
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "error.channel.douyin.mchAppNotFound");
|
||||
}
|
||||
var config = this.findByDouyinDirectAppId(param.getDouyinDirectAppId());
|
||||
config.setAuthCallbackUrl(param.getAuthCallbackUrl());
|
||||
// Convert copy(IGNORE) 自动处理 appSecret:null 不覆盖,非 null 设置新值
|
||||
DouyinDirectAppAuthConfigConvert.CONVERT.copy(param, config);
|
||||
douyinDirectAppAuthConfigManager.updateById(config);
|
||||
|
||||
@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 微信直连商户应用授权认证配置
|
||||
///
|
||||
/// 配置直连商户应用的应用密钥和授权回调地址,用于微信OAuth授权流程中的身份验证与回调跳转。
|
||||
/// 配置直连商户应用的应用密钥,用于微信OAuth授权流程中的身份验证。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -34,9 +34,6 @@ public class WechatDirectAppAuthConfig extends MchBaseEntity implements ToResult
|
||||
@TableField(typeHandler = DataEncryptTypeHandler.class)
|
||||
private String appSecret;
|
||||
|
||||
/// 授权回调地址
|
||||
private String authCallbackUrl;
|
||||
|
||||
/// 转换
|
||||
@Override
|
||||
public WechatDirectAppAuthConfigResult toResult() {
|
||||
|
||||
@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
|
||||
/// # 微信服务商应用授权认证配置
|
||||
///
|
||||
/// 服务商应用(WechatIsvApp)本身为平台级全局配置, 不挂商户维度,
|
||||
/// 其授权认证配置(appSecret/回调地址)同样为全局配置。
|
||||
/// 其授权认证配置(appSecret)同样为全局配置。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -31,9 +31,6 @@ public class WechatIsvAppAuthConfig extends MpBaseEntity implements ToResult<Wec
|
||||
@TableField(typeHandler = DataEncryptTypeHandler.class)
|
||||
private String appSecret;
|
||||
|
||||
/// 授权回调地址
|
||||
private String authCallbackUrl;
|
||||
|
||||
/// 转换
|
||||
@Override
|
||||
public WechatIsvAppAuthConfigResult toResult() {
|
||||
|
||||
@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 微信服务商通道商户应用授权认证配置
|
||||
///
|
||||
/// 配置服务商通道商户应用(子商户应用)的应用密钥和授权回调地址,用于微信OAuth授权流程中的身份验证与回调跳转。
|
||||
/// 配置服务商通道商户应用(子商户应用)的应用密钥,用于微信OAuth授权流程中的身份验证。
|
||||
/// 一个应用对应一份授权配置(由唯一约束 channel_mch_no + wechat_isv_mch_app_id 保证)。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@@ -35,9 +35,6 @@ public class WechatIsvMchAppAuthConfig extends MchBaseEntity implements ToResult
|
||||
@TableField(typeHandler = DataEncryptTypeHandler.class)
|
||||
private String appSecret;
|
||||
|
||||
/// 授权回调地址
|
||||
private String authCallbackUrl;
|
||||
|
||||
/// 转换
|
||||
@Override
|
||||
public WechatIsvMchAppAuthConfigResult toResult() {
|
||||
|
||||
@@ -3,13 +3,12 @@ package cn.daxpay.open.channel.wechat.param.direct;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/// # 微信直连商户应用授权认证配置保存参数
|
||||
///
|
||||
/// 保存/更新微信直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥和授权回调地址。
|
||||
/// 保存/更新微信直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥。
|
||||
///
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@@ -30,8 +29,4 @@ public class WechatDirectAppAuthConfigParam {
|
||||
|
||||
@Schema(description = "应用密钥")
|
||||
private String appSecret;
|
||||
|
||||
@Size(max = 512, message = "{validation.field.authCallbackUrl.size}")
|
||||
@Schema(description = "授权回调地址(仅公众号,非必填)")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package cn.daxpay.open.channel.wechat.param.isv;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@@ -19,8 +18,4 @@ public class WechatIsvAppAuthConfigParam {
|
||||
|
||||
@Schema(description = "应用密钥(加密存储),所有应用类型首次保存时必填")
|
||||
private String appSecret;
|
||||
|
||||
@Size(max = 512, message = "{validation.field.authCallbackUrl.size}")
|
||||
@Schema(description = "授权回调地址(仅公众号应用需要)")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -3,13 +3,12 @@ package cn.daxpay.open.channel.wechat.param.isv;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/// # 微信服务商通道商户应用授权认证配置保存参数
|
||||
///
|
||||
/// 保存/更新微信服务商通道商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥和授权回调地址。
|
||||
/// 保存/更新微信服务商通道商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥。
|
||||
///
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@@ -30,8 +29,4 @@ public class WechatIsvMchAppAuthConfigParam {
|
||||
|
||||
@Schema(description = "应用密钥")
|
||||
private String appSecret;
|
||||
|
||||
@Size(max = 512, message = "{validation.field.authCallbackUrl.size}")
|
||||
@Schema(description = "授权回调地址(仅公众号,非必填)")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 微信直连商户应用授权认证配置
|
||||
///
|
||||
/// 微信直连商户应用授权认证配置的返回结果对象,含商户号、通道商户号、应用密钥(脱敏)和授权回调地址。
|
||||
/// 微信直连商户应用授权认证配置的返回结果对象,含商户号、通道商户号、应用密钥(脱敏)。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -30,7 +30,4 @@ public class WechatDirectAppAuthConfigResult extends BaseResult {
|
||||
@SensitiveInfo
|
||||
@Schema(description = "应用密钥(已脱敏)")
|
||||
private String appSecret;
|
||||
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,4 @@ public class WechatIsvAppAuthConfigResult extends BaseResult {
|
||||
@SensitiveInfo(front = 12, end = 12)
|
||||
@Schema(description = "应用密钥(已脱敏)")
|
||||
private String appSecret;
|
||||
|
||||
@Schema(description = "授权回调地址(仅公众号)")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
/// # 微信服务商通道商户应用授权认证配置
|
||||
///
|
||||
/// 微信服务商通道商户应用授权认证配置的返回结果对象,含商户号、通道商户号、应用密钥(脱敏)和授权回调地址。
|
||||
/// 微信服务商通道商户应用授权认证配置的返回结果对象,含商户号、通道商户号、应用密钥(脱敏)。
|
||||
///
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -30,7 +30,4 @@ public class WechatIsvMchAppAuthConfigResult extends BaseResult {
|
||||
@SensitiveInfo
|
||||
@Schema(description = "应用密钥(已脱敏)")
|
||||
private String appSecret;
|
||||
|
||||
@Schema(description = "授权回调地址")
|
||||
private String authCallbackUrl;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,6 @@ public class WechatDirectAppAuthConfigService {
|
||||
throw new BizInfoException(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, "error.channel.wechat.mchAppNotFound");
|
||||
}
|
||||
var config = this.findByWechatDirectAppId(param.getWechatDirectAppId());
|
||||
config.setAuthCallbackUrl(param.getAuthCallbackUrl());
|
||||
WechatDirectAppAuthConfigConvert.CONVERT.copy(param, config);
|
||||
wechatDirectAppAuthConfigManager.updateById(config);
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ public class WechatIsvAppAuthConfigService {
|
||||
public void save(WechatIsvAppAuthConfigParam param) {
|
||||
var config = this.findByWechatIsvAppId(param.getWechatIsvAppId());
|
||||
config.setAppSecret(param.getAppSecret());
|
||||
config.setAuthCallbackUrl(param.getAuthCallbackUrl());
|
||||
wechatIsvAppAuthConfigManager.updateById(config);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import cn.daxpay.open.payment.unipay.result.assist.AuthUrlResult;
|
||||
/// # 通道抽象认证策略
|
||||
///
|
||||
/// 负责获取支付所需的用户标识(微信 openId / 支付宝 userId)。按支付产品([cn.daxpay.open.platform.core.enums.pay.channel.ProductEnum])
|
||||
/// 注册, 与支付策略粒度一致。策略复用支付的商户配置体系定位通道应用(appId/appSecret/authCallbackUrl)。
|
||||
/// 注册, 与支付策略粒度一致。策略复用支付的商户配置体系定位通道应用(appId/appSecret)。
|
||||
public abstract class AbsChannelAuthStrategy implements PaymentStrategy {
|
||||
|
||||
/// 获取授权链接
|
||||
|
||||
@@ -48,10 +48,6 @@
|
||||
"userIdType": {
|
||||
"notBlank": "User ID type cannot be blank"
|
||||
},
|
||||
"authCallbackUrl": {
|
||||
"notBlank": "Authorization callback URL cannot be blank",
|
||||
"size": "Authorization callback URL cannot exceed 512 characters"
|
||||
},
|
||||
"product": {
|
||||
"notBlank": "Product code cannot be blank",
|
||||
"size": "Product code cannot exceed 32 characters",
|
||||
|
||||
@@ -48,10 +48,6 @@
|
||||
"userIdType": {
|
||||
"notBlank": "用户标识类型不可为空"
|
||||
},
|
||||
"authCallbackUrl": {
|
||||
"notBlank": "授权回调地址不可为空",
|
||||
"size": "授权回调地址不可超过512位"
|
||||
},
|
||||
"product": {
|
||||
"notBlank": "产品编码不可为空",
|
||||
"size": "支付产品不可超过32位",
|
||||
|
||||
Reference in New Issue
Block a user