feat:支付宝分账

This commit is contained in:
dzc committed 2026-08-26 13:10:07 +08:00
1 parent 388ef914fc
commit 14c2acb6c2
62 files changed
+4095 -1403

No files matched your search

@@ -0,0 +1,59 @@
package com.bsd.pjcloud.thirdparty.dto.pay;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
/**
* 商户分账关系管理参数。
*
* <p>租户和支付平台由 thirdparty 根据 {@code paySettingId} 重新读取;二级商户、
* 支付宝平台账号业务标识及授权上下文属于关系事实,由管理端在该子资源中维护;
* SDK 私钥和支付宝公钥仍由 thirdparty 平台统一配置持有。</p>
*/
@Data
public class ThirdMchFzRelationSaveDto {
/** 已有关系主键;新增时为空。 */
private Long id;
/** 关系所属商户主键,必须与支付配置所属商户一致。 */
@NotNull(message = "商户不能为空")
private Long mchId;
/** 关系使用的支付配置主键,决定渠道、二级商户和平台账号。 */
@NotNull(message = "支付配置不能为空")
private Long paySettingId;
/** 微信 sub_mchid 或支付宝直付通 smid/ip_role_id;编辑后变化时服务端创建新关系版本。 */
@Size(max = 64, message = "二级商户标识不能超过64个字符")
private String channelSubMchId;
/** 支付宝平台账号业务标识,仅用于关系审计;空字符串表示使用平台默认标识。 */
@Size(max = 64, message = "平台账号键不能超过64个字符")
private String accountKey;
/** 支付宝第三方代调用授权令牌;为空表示新增时不使用、编辑时保留原值。 */
@Size(max = 512, message = "支付宝授权令牌不能超过512个字符")
private String appAuthToken;
/** 渠道接收方类型;新增时必填,编辑后变化时必须同时提交完整新标识并创建新关系版本。 */
private String receiverType;
/** 渠道接收方账号、登录号、openId 或卡别名号;编辑时为空表示保留原完整值,非空变化时创建新关系版本。 */
@Size(max = 128, message = "接收方标识不能超过128个字符")
private String receiverAccount;
/** 渠道展示的接收方名称;支付宝和微信均允许为空,变化后原关系会使用新请求号重新绑定。 */
@Size(max = 128, message = "接收方名称不能超过128个字符")
private String receiverName;
/** 平台抽佣比例,单位为百分比,最多保留三位小数;新增关系时必填,修改默认关系时可省略。 */
private Double fzRatio;
/** 微信分账关系类型;支付宝关系不使用,变化后原关系会使用新请求号重新绑定。 */
@Size(max = 64, message = "关系类型不能超过64个字符")
private String channelRelationType;
/** 是否设为当前支付配置默认关系,1为是、0为否。 */
private String isDefault;
}
@@ -40,14 +40,18 @@ public class ThirdMchFzRelationEntity extends Model<ThirdMchFzRelationEntity> {
private String channelAppId;
/** 微信 sub_mchid 或支付宝 smid/ip_role_id,用于绑定关系与商户支付配置对应。 */
private String channelSubMchId;
/** 支付宝命名平台账号键;默认支付宝账号及微信关系为空。 */
/** 支付宝平台账号业务标识,仅用于关系审计;SDK 密钥统一读取服务端支付宝平台配置,微信关系为空。 */
private String accountKey;
/** 渠道接收方类型,微信为 MERCHANT_ID,支付宝为 userId 或 loginName。 */
/** 支付宝第三方代调用授权令牌;仅服务端渠道调用使用,管理接口不得返回完整值。 */
private String appAuthToken;
/** 渠道接收方类型,微信使用 SDK ReceiverType,支付宝支持 userId、loginName、openId、cardAliasNo。 */
private String receiverType;
/** 平台分佣接收账号,发起渠道请求时使用;管理端展示必须脱敏。 */
private String receiverAccount;
/** 平台分佣接收方名称快照,渠道不要求时允许为空。 */
private String receiverName;
/** 当前关系的平台抽佣比例,单位为百分比,范围为0到100,持久化精度为0.001%;新支付和分账金额只读取该关系快照。 */
private Double fzRatio;
/** 渠道关系类型,微信默认 SERVICE_PROVIDER,支付宝关系允许为空。 */
private String channelRelationType;
/** 渠道绑定稳定幂等号;支付宝重试必须保持不变,微信用于本地审计。 */
@@ -0,0 +1,51 @@
package com.bsd.pjcloud.thirdparty.vo.pay;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 管理端展示的商户分账关系。
*
* <p>接收方账号已脱敏,绑定请求和响应快照不返回浏览器,避免把渠道报文
* 或内部配置暴露给管理端页面。</p>
*/
@Data
public class ThirdMchFzRelationVo {
/** 关系主键。 */
private Long id;
/** 关系所属商户主键。 */
private Long mchId;
/** 关系使用的支付配置主键。 */
private Long paySettingId;
/** 支付平台编码:10微信、20支付宝。 */
private String platformType;
/** 微信子商户号或支付宝直付通 smid/ip_role_id。 */
private String channelSubMchId;
/** 支付宝平台账号业务标识,仅用于关系审计;微信为空。 */
private String accountKey;
/** 是否已配置支付宝授权令牌;管理端只接收布尔状态,绝不返回完整令牌。 */
private Boolean appAuthTokenConfigured;
/** 接收方类型。 */
private String receiverType;
/** 脱敏后的接收方标识。 */
private String receiverAccount;
/** 接收方展示名称。 */
private String receiverName;
/** 当前关系的平台抽佣比例,单位为百分比,最多保留三位小数(0.001%)。 */
private Double fzRatio;
/** 微信关系类型;支付宝为空。 */
private String channelRelationType;
/** 当前关系绑定状态。 */
private String status;
/** 是否为当前支付配置默认关系。 */
private String isDefault;
/** 渠道确认绑定时间。 */
private LocalDateTime boundTime;
/** 最近一次渠道状态。 */
private String lastExternalStatus;
/** 最近一次错误摘要。 */
private String bindError;
/** 最近一次绑定或查询时间。 */
private LocalDateTime lastQueryTime;
}