Skip to content

统一支付接口

提示

业务系统通过下单接口发起收款,网关会根据系统中的配置和业务系统传输的参数,选择的对应的支付通道和支付方式发起下单请求。 同时网关根据不同的支付方式返回对应发起支付使用的参数,业务系统使用该参数参数来调起支付。

接口说明

参数说明
请求URL/unipay/pay
请求方式POST
请求类型application/json

请求参数

业务参数

提示

设置参数时,不要忘了设置公共请求参数调用说明,未做特殊说明所有接口都需要传输

字段名变量名必填类型长度示例值描述
商户订单号bizOrderNoString100123支付时客户系统传输的业务单号,需要保证唯一,可以为字符文字组合,不要包含特殊符号,订单号不可重复
支付标题titleString100测试支付
支付描述descriptionString500测试支付的描述
开启分账allocationBooleantrue订单是否允许分账,不传输为不开启
开启自动分账autoAllocationBooleanfalse是否自动对支付订单进行分账,需要开启分账字段为true才会生效
过期时间expiredTimeLong2024-10-24 12:00:00订单过期时间,格式为yyyy-MM-dd HH:mm:ss,不传输为默认值,默认为当前时间往后加24小时。
支付通道channelString32ali_pay要进行支付的通道编码,如微信支付、支付宝支付等。见常量和状态表支付通道相关的描述
支付方式methodString32qrcode进行支付的方式编码,如扫码支付、条码支付等。见常量和状态表支付方式相关的描述
其他支付方式otherMethodString128wx_pub只有在 支付方式为其他支付(other)时才会生效,传输各种三四方通道自定义的支付方式。见常量和状态表其他支付方式相关的描述
限制用户支付类型limitPayString128no_credit限制用户支付类型, 目前支持限制信用卡,部分通道才会有效
支付金额amountBigDecimal8,210.12要进行支付的金额,单位为,保留两位小数,小数buff末尾不可为0
用户标识openIdString128wxgj22ed144df11主要用于Jsapi、小程序支付等需要用户标识才可以支付的场合
付款码authCodeString1286117665200152被扫支付方式所需要传输的参数
终端设备编码terminalNoString128Hvbvdfg使用被扫支付方式,部分通道要求传输扫码终端号,此处的设备为在Daxpay中管理并进行报备的终端
附加支付参数extraParamString2048主要用于传输各通道特有的参数数据
商户扩展参数attachString500id=123332商户扩展参数,回调时会原样返回
同步请求地址returnUrlString200http://abc.cn/returnCallback支付完成后,会自动跳转到设置的页面,部分场景下才会生效
退出地址quitUrlString200http://abc.com/quit用户付款中途退出返回商户网站的地址(部分支付场景中可用)
异步通知地址notifyUrlString200http://abc.cn/noticeCallback异步通知地址,用于商户系统接收回调消息通知

响应结果

业务响应参数

提示

业务数据在公共响应参数中的data字段,在code0时才会有返回数据,见调用说明

字段名变量名必传类型示例值描述
商户订单号bizOrderNoString1753370980523384832发起支付时传输的商户订单号
订单号orderNoStringtrue支付系统生成的支付订单号
支付状态statusStringpay_success常量和状态表相关的描述
支付参数体payBodyStringweixin://wxpay/bizpayurl?pr=QimHZC7zz用于用户终端发起支付请求数据, 需要根据不同的支付通道和支付方式进行处理, 见通道说明

HTTP请求示例

请求参数

普通支付

json
{
  "bizOrderNo" : "SDK_1744186016845",
  "title" : "测试微信扫码支付",
  "description" : "这是支付备注",
  "allocation" : false,
  "channel" : "wechat_pay",
  "method" : "qrcode",
  "amount" : 0.01,
  "attach" : "{回调参数}",
  "returnUrl" : "https://abc.com/returnurl",
  "notifyUrl" : "http://127.0.0.1:10880/test/callback/notify",
  "mchNo" : "M1723635576766",
  "appId" : "M8207639754663343",
  "clientIp" : "127.0.0.1",
  "sign" : "bb83e7cb4553edcebdc57f16de13a580",
  "reqTime" : "2025-04-09 16:06:56"
}

其他支付方式

json
{
  "bizOrderNo" : "SDK_1744259982878",
  "title" : "测试汇付的其他支付方式",
  "description" : "这是汇付支付宝小程序支付",
  "allocation" : false,
  "channel" : "ada_pay",
  "method" : "other",
  "otherMethod" : "alipay_lite",
  "amount" : 1.52,
  "extraParam" : "{\"openId\":\"9021000135649359\"}",
  "attach" : "{回调参数}",
  "returnUrl" : "https://abc.com/returnurl",
  "notifyUrl" : "http://127.0.0.1:10880/test/callback/notify",
  "mchNo" : "M1723635576766",
  "appId" : "M8207639754663343",
  "clientIp" : "127.0.0.1",
  "sign" : "79060b13ad0b66cb83ba7afa197a9d00",
  "reqTime" : "2025-04-10 12:39:42"
}

响应参数(成功)

json
{
    "code": 0,
    "msg": "success",
    "data": {
        "bizOrderNo": "SDK_1744185809447",
        "orderNo": "DEV_P2025040916033370000024",
        "status": "progress",
        "payBody": "weixin://wxpay/bizpayurl?pr=4njI7C5z1"
    },
    "sign": "4a1308f097398c01c06a84ef11fc6eba",
    "resTime": "2025-04-09 16:03:35",
    "traceId": "foX7glq8rSMg"
}

响应参数(失败)

json
{
  "code" : 20044,
  "msg" : "订单号重复,请重新发起支付",
  "sign" : "82ae371267c176fb9f89499e4c6ff592",
  "resTime" : "2025-04-09 16:08:38",
  "traceId" : "mrfa4lKAVGtC"
}

SDK请求示例

提示

使用SDK可以简化接入支付的速度

java
/**
 * 普通支付类型
 */
public void wxQrPay() {
    PayParam param = new PayParam();
    param.setClientIp("127.0.0.1");
    param.setBizOrderNo("SDK_"+ System.currentTimeMillis());
    param.setTitle("测试微信扫码支付");
    param.setDescription("这是支付备注");
    param.setAmount(BigDecimal.valueOf(0.01));
    param.setChannel(ChannelEnum.WECHAT.getCode());
    param.setMethod(PayMethodEnum.QRCODE.getCode());
    param.setAttach("{回调参数}");
    param.setAllocation(false);
    param.setReturnUrl("https://abc.com/returnurl");
    param.setNotifyUrl("http://127.0.0.1:10880/test/callback/notify");
    DaxPayResult<PayResult> execute = DaxPayKit.execute(param);
    // 验签
    System.out.println("验签结果: " + DaxPayKit.verifySign(execute));
    System.out.println(JsonUtil.toJsonStr(execute));
}
/**
 * 三方平台的其他类型支付
 */
public void otherPay() {
    PayParam param = new PayParam();
    param.setClientIp("127.0.0.1");
    param.setBizOrderNo("SDK_"+ System.currentTimeMillis());
    param.setTitle("测试汇付的其他支付方式");
    param.setDescription("这是汇付支付宝小程序支付");
    param.setAmount(BigDecimal.valueOf(1.52));
    param.setChannel(ChannelEnum.ADA_PAY.getCode());
    param.setMethod(PayMethodEnum.OTHER.getCode());
    // 使用支付宝小程序支付类型
    param.setOtherMethod("alipay_lite");
    param.setAttach("{回调参数}");
    param.setAllocation(false);
    AdaPayParam adaPayParam = new AdaPayParam();
    adaPayParam.setOpenId("9021000135649359");
    param.setExtraParam(JsonUtil.toJsonStr(adaPayParam));

    param.setReturnUrl("https://abc.com/returnurl");
    param.setNotifyUrl("http://127.0.0.1:10880/test/callback/notify");

    DaxPayResult<PayResult> execute = DaxPayKit.execute(param);
    System.out.println(JsonUtil.toJsonStr(execute));
}

回调消息通知

如果设置了异步通知地址,则订单将会在发生变动后给该地址发送通知消息,数据格式见回调和订阅消息接收, 业务数据格式与查询支付订单中的数据格式一致

通知示例

json
{
  "mchNo": "M1723635576766",
  "appId": "M8207639754663343",
  "code": 0,
  "msg": "success",
  "data": {
    "bizOrderNo": "PAY_39713088951744515312379",
    "orderNo": "DEV_P2025041311351570000003",
    "outOrderNo": "2025041322001404211438174344",
    "title": "测试支付",
    "allocation": false,
    "autoAllocation": false,
    "channel": "ali_pay",
    "method": "qrcode",
    "amount": 0.01,
    "refundableBalance": 0.01,
    "status": "success",
    "refundStatus": "no_refund",
    "payTime": "2025-04-13 11:35:37",
    "expiredTime": "2025-04-13 15:46:57"
  },
  "sign": "8f30f3414ead24d51f4560cf59fedc93",
  "resTime": "2025-04-13 11:36:17",
  "traceId": "yP730vb3yv74"
}

同步跳转通知

实现中

本文档内容版权属于济南易杯光年软件技术有限公司