适用于延时分账场景的支付确认

This commit is contained in:
HH 2022-05-13 09:05:53 +08:00
parent 3cb9c512ac
commit bd01807460
2 changed files with 56 additions and 1 deletions

View File

@ -21,6 +21,7 @@ import javax.annotation.Resource;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -34,6 +35,45 @@ public class AdapayService {
@Resource @Resource
private AdapayProperties adapayProperties; private AdapayProperties adapayProperties;
/**
* 支付确认
* 适用于延时分账的场景只有已支付完成且延时分账的Payment对象才支持调用创建支付确认对象
* 支持一次全额或多次部分确认多次部分确认时当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额
*
* @param paymentId [必填] String(64) Adapay生成的支付对象id
* @param orderNo [必填] String(64) 请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @param confirmAmt [必填] String(14) 确认金额必须大于0保留两位小数点如0.10100.05等必须小于等于原支付金额-已确认金额-已撤销金额
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
*/
public Map<String, Object> paymentConfirm(@NotNull String paymentId, @NotNull String orderNo, @NotNull String confirmAmt) throws BaseAdaPayException {
return paymentConfirm(paymentId, orderNo, confirmAmt, null, null, null);
}
/**
* 支付确认
* 适用于延时分账的场景只有已支付完成且延时分账的Payment对象才支持调用创建支付确认对象
* 支持一次全额或多次部分确认多次部分确认时当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额
*
* @param paymentId [必填] String(64) Adapay生成的支付对象id
* @param orderNo [必填] String(64) 请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @param confirmAmt [必填] String(14) 确认金额必须大于0保留两位小数点如0.10100.05等必须小于等于原支付金额-已确认金额-已撤销金额
* @param description String(128) 附加说明
* @param feeMode String(1) 手续费收取模式O-商户手续费账户扣取手续费I-交易金额中扣取手续费值为空时默认值为I若为O时分账对象列表中不支持传入手续费承担方
* @param divMembers 分账对象信息列表一次请求最多仅支持7个分账方json对象 形式详见 分账对象信息列表
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
*/
public Map<String, Object> paymentConfirm(@NotNull String paymentId, @NotNull String orderNo, @NotNull String confirmAmt,
String description, String feeMode, List<DivMember> divMembers) throws BaseAdaPayException {
Map<String, Object> confirmParams = new HashMap<>();
confirmParams.put("payment_id", paymentId);
confirmParams.put("order_no", orderNo);
confirmParams.put("confirm_amt", confirmAmt);
confirmParams.put("div_members", divMembers);
confirmParams.put("fee_mode", feeMode);
confirmParams.put("description", description);
return PaymentConfirm.create(confirmParams);
}
/** /**
* 创建余额支付请求 * 创建余额支付请求
* 商户利用该接口进行余额支付支持同一商户下的商户-用户用户-商户用户-用户间的账户余额支付 * 商户利用该接口进行余额支付支持同一商户下的商户-用户用户-商户用户-用户间的账户余额支付

View File

@ -60,7 +60,7 @@ public class PayParam {
private String feeMode; private String feeMode;
/** /**
* 包含所有必填参数的构造器其它参数按需set * 包含所有[必填参数]的构造器其它参数按需set
* *
* @param orderNo [必填项]请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一 * @param orderNo [必填项]请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @param payAmt [必填项]交易金额必须大于0保留两位小数点"0.10""100.05" * @param payAmt [必填项]交易金额必须大于0保留两位小数点"0.10""100.05"
@ -80,4 +80,19 @@ public class PayParam {
String jsonString = JSON.toJSONString(this); String jsonString = JSON.toJSONString(this);
return JSON.parseObject(jsonString); return JSON.parseObject(jsonString);
} }
/**
* 构造一个延迟分账的支付参数
*
* @param orderNo [必填项]请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @param payAmt [必填项]交易金额必须大于0保留两位小数点"0.10""100.05"
* @param goodsTittle [必填项]商品名称
* @param goodsDesc [必填项]商品描述信息微信小程序和微信公众号该字段最大长度42个字符
* @return 支付参数
*/
public static PayParam createDelayPay(String orderNo, String payAmt, String goodsTittle, String goodsDesc) {
PayParam payParam = new PayParam(orderNo, payAmt, goodsTittle, goodsDesc);
payParam.setPayMode("delay");
return payParam;
}
} }