diff --git a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/controller/isv/AlipayIsvChannelMerchantController.java b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/controller/isv/AlipayIsvChannelMerchantController.java index 284ac29f7..fcca694c4 100644 --- a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/controller/isv/AlipayIsvChannelMerchantController.java +++ b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/controller/isv/AlipayIsvChannelMerchantController.java @@ -3,6 +3,7 @@ package cn.daxpay.open.channel.alipay.controller.isv; import cn.daxpay.open.platform.core.annotation.PermCode; import cn.daxpay.open.platform.core.rest.Res; import cn.daxpay.open.platform.core.rest.result.Result; +import cn.daxpay.open.channel.alipay.param.isv.AlipayIsvAppAuthTokenUpdateParam; import cn.daxpay.open.channel.alipay.param.isv.AlipayIsvChannelMerchantCreateParam; import cn.daxpay.open.channel.alipay.result.isv.AlipayIsvChannelMerchantResult; import cn.daxpay.open.channel.alipay.service.isv.AlipayIsvChannelMerchantService; @@ -44,4 +45,12 @@ public class AlipayIsvChannelMerchantController { alipayIsvChannelMerchantService.create(param); return Res.ok(); } + + @PermCode(code = "manage", nameCn = "通道商户管理", nameEn = "Channel Merchant Manage") + @Operation(summary = "更新应用授权令牌") + @PostMapping("/update-app-auth-token") + public Result updateAppAuthToken(@RequestBody @Validated AlipayIsvAppAuthTokenUpdateParam param) { + alipayIsvChannelMerchantService.updateAppAuthToken(param); + return Res.ok(); + } } diff --git a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/param/isv/AlipayIsvAppAuthTokenUpdateParam.java b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/param/isv/AlipayIsvAppAuthTokenUpdateParam.java new file mode 100644 index 000000000..8fb8f2a1c --- /dev/null +++ b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/param/isv/AlipayIsvAppAuthTokenUpdateParam.java @@ -0,0 +1,27 @@ +package cn.daxpay.open.channel.alipay.param.isv; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.experimental.Accessors; + +/// # 应用授权令牌更新参数 +/// +/// 用于手动设置或更新支付宝服务商通道商户的应用授权令牌(app_auth_token)。 +/// 适用于创建时未填写令牌后续补充, 或令牌过期/变更后重新绑定的场景。 +/// +@Data +@Accessors(chain = true) +@Schema(title = "应用授权令牌更新参数") +public class AlipayIsvAppAuthTokenUpdateParam { + + /// 通道商户号 + @Schema(description = "通道商户号") + @NotBlank(message = "{validation.field.channelMchNo.notBlank}") + private String channelMchNo; + + /// 应用授权令牌(服务商代子商户调用接口的凭据) + @Schema(description = "应用授权令牌") + @NotBlank(message = "{validation.field.appAuthToken.notBlank}") + private String appAuthToken; +} diff --git a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/isv/AlipayIsvChannelMerchantService.java b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/isv/AlipayIsvChannelMerchantService.java index be5d39b47..e002444e8 100644 --- a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/isv/AlipayIsvChannelMerchantService.java +++ b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/isv/AlipayIsvChannelMerchantService.java @@ -4,6 +4,7 @@ import cn.daxpay.open.channel.alipay.dao.isv.AlipayIsvAppManager; import cn.daxpay.open.channel.alipay.dao.isv.AlipayIsvChannelMerchantManager; import cn.daxpay.open.channel.alipay.entity.isv.AlipayIsvApp; import cn.daxpay.open.channel.alipay.entity.isv.AlipayIsvChannelMerchant; +import cn.daxpay.open.channel.alipay.param.isv.AlipayIsvAppAuthTokenUpdateParam; import cn.daxpay.open.channel.alipay.param.isv.AlipayIsvChannelMerchantCreateParam; import cn.daxpay.open.channel.alipay.result.isv.AlipayIsvChannelMerchantResult; import cn.daxpay.open.payment.channel.dao.mch.ChannelMerchantManager; @@ -75,4 +76,19 @@ public class AlipayIsvChannelMerchantService { // 支付宝: 通道商户配置不存在 .orElseThrow(() -> new DataNotExistException("error.payment.channel.channelMerchantNotExist")); } + + /// 更新应用授权令牌 + /// + /// 手动设置或更新子商户的 app_auth_token, 适用于创建时未填写后续补充, + /// 或令牌过期/变更后重新绑定的场景。 + @Transactional(rollbackFor = Exception.class) + public void updateAppAuthToken(AlipayIsvAppAuthTokenUpdateParam param) { + var entity = alipayIsvChannelMerchantManager.lambdaQuery() + .eq(AlipayIsvChannelMerchant::getChannelMchNo, param.getChannelMchNo()) + .oneOpt() + // 支付宝: 通道商户配置不存在 + .orElseThrow(() -> new DataNotExistException("error.payment.channel.channelMerchantNotExist")); + entity.setAppAuthToken(param.getAppAuthToken()); + alipayIsvChannelMerchantManager.updateById(entity); + } }