From 4083e471098d2dd09f3da5820d54ddb261f0cac4 Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Sun, 5 Jul 2026 00:03:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(alipay):=20=E6=9C=8D=E5=8A=A1=E5=95=86?= =?UTF-8?q?=E9=80=9A=E9=81=93=E5=95=86=E6=88=B7=E5=BA=94=E7=94=A8=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E4=BB=A4=E7=89=8C=E6=94=AF=E6=8C=81=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE/=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlipayIsvChannelMerchantController.java | 9 +++++++ .../isv/AlipayIsvAppAuthTokenUpdateParam.java | 27 +++++++++++++++++++ .../isv/AlipayIsvChannelMerchantService.java | 16 +++++++++++ 3 files changed, 52 insertions(+) create mode 100644 daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/param/isv/AlipayIsvAppAuthTokenUpdateParam.java 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); + } }