feat(alipay): 服务商通道商户应用授权令牌支持手动设置/更新

This commit is contained in:
DaxPay Dev
2026-07-05 00:03:31 +08:00
parent 1029433e16
commit 4083e47109
3 changed files with 52 additions and 0 deletions

View File

@@ -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<Void> updateAppAuthToken(@RequestBody @Validated AlipayIsvAppAuthTokenUpdateParam param) {
alipayIsvChannelMerchantService.updateAppAuthToken(param);
return Res.ok();
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}