Appearance
统一分账接口 ¶
TIP
针对可以分账的支付订单,在没有开启自动分账的情况下,需要调用此接口进行分账,支持手动指定分账接收方、手动指定分账组、使用默认分账组进行分账三种。 已经接入支付宝和微信支付的分账产品,每笔支付订单限定只能分一次账,不能多次分账。
接口说明 ¶
参数 | 说明 |
---|---|
请求URL | /uniPay/allocation/start |
请求方式 | POST |
请求类型 | application/json |
请求参数 ¶
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 | |
---|---|---|---|---|---|---|
商户分账单号 | bizAllocationNo | 是 | String | 100 | 123 | 支付时客户系统传输的分账单号,需要保证唯一,可以为字符文字组合 |
支付订单号 | orderNo | 否 | String | 32 | P123 | |
商户支付订单号 | bizOrderNo | 否 | String | 100 | DEVP123 | |
分账描述 | description | 否 | String | 150 | 测试支付的描述 | |
分账组编号 | groupNo | 否 | String | 20 | 123 | 优先级 分账接收方列表 > 分账组编号 > 默认分账组 |
分账接收方列表 | receivers | 否 | AllocReceiverParam[] | |||
异步通知地址 | notifyUrl | 否 | String | 200 | http://abc.cn/noticeCallback | 异步通知地址,为空则读取管理端的配置,此配置不会生效 |
商户扩展参数 | attach | 否 | String | 500 | id=123332 | 商户扩展参数,回调时会原样返回 |
用户IP | clientIp | 否 | String | 127.0.0.1 | 支持V4和V6,部分支付方式要求必填,如调用微信支付方式时 | |
随机数值 | nonceStr | 否 | String | 32 | d112892e382a7093 | |
签名值 | sign | 否 | String | 64 | 072695d112892e382a7093b81e6a52af | |
请求时间 | reqTime | 是 | Long | 123123121 | 使用时间戳(秒级) |
AllocReceiverParam参数 ¶
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 | |
---|---|---|---|---|---|---|
分账接收方编号 | receiverNo | 是 | String | 32 | 123 | |
分账金额 | amount | 是 | Integer | 15 |
响应结果 ¶
提示
业务数据包裹在公共响应参数
中的data
字段,在code
为0
时才会有返回数据。
字段名 | 变量名 | 必传 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
分账单号 | allocationNo | 是 | String | 1753370980523384832 | 发起支付时传输的商户订单号 |
商户分账单号 | bizAllocationNo | 是 | String | 1753370980523384832 | 支付系统生成的支付订单号 |
支付状态 | status | 否 | String | allocation_processing | 见常量和状态表AllocOrderStatusEnum相关的描述 |
状态码 | code | 是 | Integer | 0 | 为0表示成功,非0表示失败 |
错误信息 | msg | 否 | String | 关闭失败 | 状态非0时会有返回值 |
响应时间 | resTime | 是 | Long | 123123121 | 服务返回请求的时间,时间戳(秒级) |
响应数据签名值 | sign | 是 | String | 072695d112892e382a7093b81e6a52af | 对响应内容进行签名 |
HTTP请求示例 ¶
请求参数 ¶
json
{
"bizAllocationNo": "A29729",
"orderNo": "DEVP24060123574963000003",
"description": "测试分账",
"receivers": [
{
"receiverNo": "123",
"amount": 6000
}
],
"attach": "88899",
"clientIp": "127.0.0.1",
"sign": "fbe24cb131ee86ff76b66b8d7909169b26b805ac2195969caf18d0079ba4beea",
"reqTime": 1717261696
}
响应参数(成功) ¶
json
{
"msg": "success",
"code": 0,
"data": {
"allocationNo": "DEVA24060201494863000002",
"bizAllocationNo": "A60434",
"status": "allocation_processing",
"code": 0,
"resTime": 1717264189,
"sign": "a29b68e5d89ec6c7f2985a2680bd22b40cbffd79b4e0d8d0ec331e9b6337e1b1"
},
"traceId": "inOL4mbRjzLa"
}
响应参数(失败) ¶
json
{
"msg": "success",
"code": 0,
"data": {
"code": 1,
"msg": "该订单已分账完成",
"resTime": 1717261697,
"sign": "bd3fef1a43a017edf57359035a3f8fce2dbd3c32f5bfb43360e9ef3d913c6413"
},
"traceId": "rkq7V4y04zG2"
}
SDK请求示例 ¶
提示
使用SDK可以简化接入支付的速度
java
package cn.daxpay.single.sdk.allocation;
import cn.daxpay.single.sdk.code.PayChannelEnum;
import cn.daxpay.single.sdk.code.PayMethodEnum;
import cn.daxpay.single.sdk.code.SignTypeEnum;
import cn.daxpay.single.sdk.model.allocation.AllocationModel;
import cn.daxpay.single.sdk.model.pay.PayModel;
import cn.daxpay.single.sdk.model.sync.AllocSyncModel;
import cn.daxpay.single.sdk.net.DaxPayConfig;
import cn.daxpay.single.sdk.net.DaxPayKit;
import cn.daxpay.single.sdk.param.allocation.AllocFinishParam;
import cn.daxpay.single.sdk.param.allocation.AllocReceiverParam;
import cn.daxpay.single.sdk.param.allocation.AllocSyncParam;
import cn.daxpay.single.sdk.param.allocation.AllocationParam;
import cn.daxpay.single.sdk.param.pay.PayParam;
import cn.daxpay.single.sdk.response.DaxPayResult;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
/**
* 支付分账测试
* @author xxm
* @since 2024/4/6
*/
public class AllocationTest {
@Before
public void init() {
// 初始化支付配置
DaxPayConfig config = DaxPayConfig.builder()
.serviceUrl("http://127.0.0.1:9000")
.signSecret("123456")
.signType(SignTypeEnum.HMAC_SHA256)
.build();
DaxPayKit.initConfig(config);
}
/**
* 创建手动分账订单
*/
@Test
public void allocationOrder() {
PayParam param = new PayParam();
param.setClientIp("127.0.0.1");
param.setNotNotify(true);
param.setBizOrderNo("SDK_"+ System.currentTimeMillis());
param.setTitle("测试手动分账");
param.setDescription("这是支付备注");
param.setAmount(10000);
param.setChannel(PayChannelEnum.ALI.getCode());
param.setMethod(PayMethodEnum.QRCODE.getCode());
param.setAttach("{回调参数}");
param.setAllocation(true);
DaxPayResult<PayModel> execute = DaxPayKit.execute(param);
System.out.println(JSONUtil.toJsonStr(execute));
}
/**
* 创建自动分账订单
*/
@Test
public void allocationAutoOrder() {
PayParam param = new PayParam();
param.setClientIp("127.0.0.1");
param.setNotNotify(true);
param.setBizOrderNo("SDK_"+ System.currentTimeMillis());
param.setTitle("测试手动分账");
param.setDescription("这是支付备注");
param.setAmount(10000);
param.setChannel(PayChannelEnum.UNION_PAY.getCode());
param.setMethod(PayMethodEnum.QRCODE.getCode());
param.setAttach("{回调参数}");
param.setAllocation(true);
param.setAutoAllocation(true);
DaxPayResult<PayModel> execute = DaxPayKit.execute(param);
System.out.println(JSONUtil.toJsonStr(execute));
}
/**
* 手动发起分账, 使用默认分账组
*/
@Test
public void allocationOpen() {
// 分账参数
AllocationParam param = new AllocationParam();
param.setBizAllocationNo("A"+ RandomUtil.randomNumbers(5));
param.setAttach("88899");
param.setBizOrderNo("SDK_1717233422418");
param.setDescription("测试分账");
param.setClientIp("127.0.0.1");
DaxPayResult<AllocationModel> execute = DaxPayKit.execute(param);
System.out.println(JSONUtil.toJsonStr(execute));
}
/**
* 手动发起分账, 使用指定分账组
*/
@Test
public void allocationOpenByGroup() {
// 分账参数
AllocationParam param = new AllocationParam();
param.setBizAllocationNo("A"+ RandomUtil.randomNumbers(5));
param.setAttach("88899");
param.setBizOrderNo("SDK_1717257064753");
param.setGroupNo("123");
param.setDescription("测试分账");
param.setClientIp("127.0.0.1");
DaxPayResult<AllocationModel> execute = DaxPayKit.execute(param);
System.out.println(JSONUtil.toJsonStr(execute));
}
/**
* 手动发起分账, 手动传入接收方
*/
@Test
public void allocationOpenByReceivers() {
// 分账参数
AllocationParam param = new AllocationParam();
param.setBizAllocationNo("A"+ RandomUtil.randomNumbers(5));
param.setAttach("88899");
param.setOrderNo("DEVP24060123574963000003");
AllocReceiverParam allocReceiverParam = new AllocReceiverParam();
allocReceiverParam.setReceiverNo("123");
allocReceiverParam.setAmount(6000);
param.setReceivers(Collections.singletonList(allocReceiverParam));
param.setDescription("测试分账");
param.setClientIp("127.0.0.1");
DaxPayResult<AllocationModel> execute = DaxPayKit.execute(param);
System.out.println(JSONUtil.toJsonStr(execute));
}
}