diff --git a/_config/sql/update-tables.sql b/_config/sql/update-tables.sql index b77a3c86b..90c03e5bd 100644 --- a/_config/sql/update-tables.sql +++ b/_config/sql/update-tables.sql @@ -1,3 +1,7 @@ -- 支付宝直连商户应用增加应用类型字段 ALTER TABLE "public"."alipay_direct_app" ADD COLUMN "app_type" varchar(32); + +-- 抖音直连商户应用授权认证配置增加应用密钥字段 +ALTER TABLE "public"."douyin_direct_app_auth_config" + ADD COLUMN "app_secret" varchar(512); diff --git a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/entity/direct/DouyinDirectAppAuthConfig.java b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/entity/direct/DouyinDirectAppAuthConfig.java index 44e9a8d7f..e717a73bc 100644 --- a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/entity/direct/DouyinDirectAppAuthConfig.java +++ b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/entity/direct/DouyinDirectAppAuthConfig.java @@ -4,6 +4,7 @@ import org.dromara.daxpay.channel.douyin.convert.direct.DouyinDirectAppAuthConfi import org.dromara.daxpay.channel.douyin.result.direct.DouyinDirectAppAuthConfigResult; import org.dromara.daxpay.payment.common.entity.merchant.MchBaseEntity; import org.dromara.daxpay.platform.common.mybatisplus.function.ToResult; +import org.dromara.daxpay.platform.common.mybatisplus.handler.encrypt.DataEncryptTypeHandler; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -13,7 +14,7 @@ import lombok.experimental.Accessors; /// # 抖音直连商户应用授权认证配置 /// -/// 配置直连商户应用的授权回调地址,用于抖音用户授权流程中的回调跳转。 +/// 配置直连商户应用的应用密钥和授权回调地址,用于抖音用户授权流程中的身份验证与回调跳转。 /// @EqualsAndHashCode(callSuper = true) @Data @@ -29,6 +30,10 @@ public class DouyinDirectAppAuthConfig extends MchBaseEntity implements ToResult @TableField(updateStrategy = FieldStrategy.NEVER) private Long douyinDirectAppId; + /// 应用密钥(加密存储) + @TableField(typeHandler = DataEncryptTypeHandler.class) + private String appSecret; + /// 授权回调地址 private String authCallbackUrl; diff --git a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/param/direct/DouyinDirectAppAuthConfigParam.java b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/param/direct/DouyinDirectAppAuthConfigParam.java index a0ddb530a..2f01840a2 100644 --- a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/param/direct/DouyinDirectAppAuthConfigParam.java +++ b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/param/direct/DouyinDirectAppAuthConfigParam.java @@ -9,7 +9,7 @@ import lombok.experimental.Accessors; /// # 抖音直连商户应用授权认证配置保存参数 /// -/// 保存/更新抖音直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号和授权回调地址。 +/// 保存/更新抖音直连商户应用授权认证配置时接收的请求参数,含商户号、通道商户号、应用密钥和授权回调地址。 /// @Data @Accessors(chain = true) @@ -28,6 +28,10 @@ public class DouyinDirectAppAuthConfigParam { @Schema(description = "通道商户号") private String channelMchNo; + @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; diff --git a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/result/direct/DouyinDirectAppAuthConfigResult.java b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/result/direct/DouyinDirectAppAuthConfigResult.java index b5ddb502c..8676a43b1 100644 --- a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/result/direct/DouyinDirectAppAuthConfigResult.java +++ b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/result/direct/DouyinDirectAppAuthConfigResult.java @@ -1,5 +1,6 @@ package org.dromara.daxpay.channel.douyin.result.direct; +import org.dromara.daxpay.platform.common.json.sensitive.SensitiveInfo; import org.dromara.daxpay.payment.common.result.MchBaseResult; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -20,6 +21,10 @@ public class DouyinDirectAppAuthConfigResult extends MchBaseResult { @Schema(description = "关联应用ID") private Long douyinDirectAppId; + @SensitiveInfo + @Schema(description = "应用密钥 (已脱敏)") + private String appSecret; + @Schema(description = "授权回调地址") private String authCallbackUrl; } diff --git a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/service/direct/DouyinDirectAppAuthConfigService.java b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/service/direct/DouyinDirectAppAuthConfigService.java index d5205ed68..f433b638f 100644 --- a/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/service/direct/DouyinDirectAppAuthConfigService.java +++ b/daxpay-channel/daxpay-channel-douyin/src/main/java/org/dromara/daxpay/channel/douyin/service/direct/DouyinDirectAppAuthConfigService.java @@ -15,7 +15,7 @@ import org.springframework.transaction.annotation.Transactional; /// # 抖音直连商户应用授权认证配置 /// -/// 管理直连商户应用的授权认证配置,查询时不存在则创建默认记录,保存时校验应用归属关系。 +/// 管理直连商户应用的密钥和授权认证配置,查询时不存在则创建默认记录,保存时校验应用归属关系。 /// @Slf4j @Service @@ -55,6 +55,7 @@ public class DouyinDirectAppAuthConfigService { } var config = this.findByDouyinDirectAppId(param.getDouyinDirectAppId()); config.setAuthCallbackUrl(param.getAuthCallbackUrl()); + // Convert copy(IGNORE) 自动处理 appSecret:null 不覆盖,非 null 设置新值 DouyinDirectAppAuthConfigConvert.CONVERT.copy(param, config); douyinDirectAppAuthConfigManager.updateById(config); } diff --git a/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/direct/WechatDirectChannelMerchant.java b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/direct/WechatDirectChannelMerchant.java index 464434a22..9a1bdbb93 100644 --- a/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/direct/WechatDirectChannelMerchant.java +++ b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/direct/WechatDirectChannelMerchant.java @@ -16,7 +16,7 @@ import lombok.experimental.Accessors; @EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) -@TableName(value = "mch_wechat_direct_channel_merchant", autoResultMap = true) +@TableName(value = "wechat_direct_channel_merchant", autoResultMap = true) public class WechatDirectChannelMerchant extends MchBaseEntity implements ToResult { /// 通道商户号(系统生成雪花号) diff --git a/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/isv/WechatIsvChannelMerchant.java b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/isv/WechatIsvChannelMerchant.java index 308d5ca7b..0cbae14f0 100644 --- a/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/isv/WechatIsvChannelMerchant.java +++ b/daxpay-channel/daxpay-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/entity/isv/WechatIsvChannelMerchant.java @@ -17,7 +17,7 @@ import lombok.experimental.Accessors; @EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) -@TableName(value = "mch_wechat_isv_channel_merchant", autoResultMap = true) +@TableName(value = "wechat_isv_channel_merchant", autoResultMap = true) public class WechatIsvChannelMerchant extends MchBaseEntity implements ToResult { /// 通道商户号(WISV+雪花)