1. 简介

QLink支付对接标准文档

2. 环境要求及基础约定

授权:联系QLink获取appKey、appSecret(密钥,用于验证报文信息)。

接口地址:

线下:http://qlink-global-test.800best.com/global-api/v1/pay

生产:http://qlink-global.800best.com/global-api/v1/pay

请求方式:

  • Method: POST
  • Content-Type: application/json

Header参数:

字段名 类型 必填 备注
appKey String 是
sign String 是
serviceProvider String 是

公共响应:

字段名 类型 必填 备注
success boolean 是 业务处理是否成功
errorCode String 否 失败码
result Object 否 业务数据

签名方式:

1、将appKey和content组成json字符串{"appKey":"appKey","content":"具体业务参数"},content为空时{"appKey":"appKey"}。

2、将第三方分配的客户appSecret添加到json的末尾,得到待加密字串{"appKey":"appKey","content":"具体业务参数"}appSecret。

3、对待加密字串做sha1加密得到签名(org.apache.commons.codec.digest.DigestUtils.sha1Hex(待加密字串))

4、将签名赋值到公共请求的sign字段

3. 查询支付账户

url:

  • /queryPayAccount

接口参数:

字段名 字段描述 类型 必填 备注
payAccount 支付账号 String 是

返回信息:

字段名 字段描述 类型 必填 备注
serviceProvider 支付服务商 String 是
type 支付方式 String 是
channelCode 支付渠道 String 是
desc 描述 String 否
country 国家 String 是
currencyList 币种 String 是

请求示例: { "payAccount": "account1" }

返回示例:

[ { "serviceProvider": "xendit", "type": "PAY" "channelCode": "QRIS", "desc": "", "country": "ID", "currencyList": ["IDR", "PHP", "VND", "THB", "SGD", "MYR", "USD"], } ]

4. 支付申请

url:

  • /apply

接口参数:

字段名 字段描述 类型 必填 备注
payAccount 支付账号 String 是
type 支付方式 String 是
channelCode 支付渠道 String 是
channelProperties 可传过期时间 Map 是 {"expires_at":"2025-08-19T15:22:06Z"} ISO 8601标准
tradeUuid 请求uuid String 是 appKey下需要唯一
tradeTime 请求交易时间 Date 是
source 支付来源 String 是 QERP_CN、QERP_ASIA、QERP_CN_MALL、QERP_ASIA_MALL
orderCode 订单号 String 是
country 国家二字码 String 是 国家二字码枚举
currency 三个字母的货币代码 String 是 三个字母的货币代码
amount 金额 Bigdecimal 是
description 描述 String 否
metadata 自定义数据 String 否 例:{ "my_custom_id": "merchant-123", "my_custom_order_id": "order-123" }
items 描述 Array 否
└ code 商品编码 String 是
└ type 商品类型 String 否 "DIGITAL_PRODUCT", "PHYSICAL_PRODUCT", "DIGITAL_SERVICE", "PHYSICAL_SERVICE", "FEE"
└ name 商品名称 String 是
└ netUnitAmount 商品单价 number 是
└ quantity 数量 number 是
└ url 商品连接 String 否
└ imageUrl 图片连接 String 否
└ category 商品类目 String 否
└ subcategory 商品子类目 String 否
└ description 描述 String 否
└ metadata 自定义数据 String 否

返回信息:

字段名 字段描述 类型 必填 备注
billCode 账单号 String 是
paymentRequestId 支付服务商唯一请求id String 否
errorCode 失败原因 String 否
actionList 商家完成操作时将使用的具体值 Array 是
└ type 商家系统需要处理以完成支付的操作类型 String 是
└ descriptor 商家系统需要处理以完成支付的操作类型 String 是
└ value 商家完成操作时将使用的具体值 String 是

请求示例:

{ "payAccount": "account1", "type": "ONLINE", "channelCode": "QRIS", "channelProperties": { "expires_at": "2025-08-11T23:59:59Z" }, "tradeUuid": "uuid", "tradeTime": "2025-08-04 13:45:21", "orderCode": "O20250804001", "country": "ID", "currency": "IDR", "amount": 1, "description": "描述", "metadata": "", "items": [ { "code": "SKU01", "type": "DIGITAL_PRODUCT", "name": "商品01", "netUnitAmount": 1, "quantity": "1", "url": "http://", "imageUrl": "http://", "category": "", "subcategory": "", "description": "", "metadata": "" } ] }

返回示例:

{ "billCode": "账单号", "paymentRequestId": "11111", "actionList": [ { "type": "", "descriptor": "", "value": "" } ] "errorCode": "" }

5. 模拟支付(xendit)

url:

  • /simulatePay

接口参数:

字段名 字段描述 类型 必填 备注
payAccount 支付账号 String 是
tradeUuid 请求uuid String 否 tradeUuid、billCode不可同时为空,都不为空时使用tradeUuid
billCode qlink单据号 String 否 tradeUuid、billCode不可同时为空
source 来源 String 是 QERP_CN、QERP_ASIA、QERP_CN_MALL、QERP_ASIA_MALL

请求示例:

{ "payAccount": "account1", "tradeUuid": "uuid", "billCode": "billCode", "source": "QERP_CN" }

6. 查询支付状态

url:

  • /getPayStatus

接口参数:

字段名 字段描述 类型 必填 备注
tradeUuidList 请求uuid Array 否 tradeUuidList、billCodeList不可同时为空,都不为空时使用tradeUuidList
billCodeList 账单号 Array 否 tradeUuidList、billCodeList不可同时为空
source 来源 String 是 QERP_CN、QERP_ASIA、QERP_CN_MALL、QERP_ASIA_MALL

返回信息:

字段名 字段描述 类型 必填 备注
tradeUuid 请求uuid String 是
billCode 帐号号 String 是
paymentRequestId 支付服务商唯一请求id String 是
orderCode 订单号 String 是
status 支付状态 String 是 支付状态枚举
payTime 支付时间 String 否 已支付时必填 ISO 8601 date-time format.
amount 金额 Bigdecimal 否
currency 三个字母的货币代码 String 否 三个字母的货币代码
errorCode 失败编码 String 否

请求示例:

{ "tradeUuidList": ["uuid1"], "billCodeList": ["billCode1"], "source": "QERP_CN" }

返回示例: [ { "amount": 1, "billCode": "billCode1", "currency": "IDR", "errorCode": "", "orderCode": "O20250804001", "payTime": "", "paymentRequestId": paymentRequestId"", "status": "PAY_WAIT", "tradeUuid": "uuid1" }, { "amount": 2, "billCode": "billCode2", "currency": "IDR", "errorCode": "", "orderCode": "O20250804002", "payTime": "2025-08-04 13:45:21", "paymentRequestId": "paymentRequestId", "status": "PAY_SUCCESS", "tradeUuid": "uuid2" } ]

7. 取消支付

url:

  • /cancel

接口参数:

字段名 字段描述 类型 必填 备注
tradeUuid 请求uuid String 否 tradeUuid、billCode不可同时为空,都不为空时使用tradeUuid
billCode 账单号 String 否 tradeUuid、billCode不可同时为空
source 来源 String 是 QERP_CN、QERP_ASIA、QERP_CN_MALL、QERP_ASIA_MALL

返回信息:

字段名 字段描述 类型 必填 备注
status 取消状态 String 是 取消状态枚举
cancelTime 取消时间 String 否 ISO 8601 date-time format.
errorCode 失败编码 String 否

请求示例:

{ "tradeUuid": "uuid1", "billCode": "billCode1", "source": "QERP_CN" }

返回示例:

{ "status": "WAIT", "cancelTime": "", "errorCode": "" }

8. 退款

url:

  • /refund

接口参数:

字段名 字段描述 类型 必填 备注
refundUuid 退款请求uuid String 是 需要唯一
tradeUuid 支付时uuid String 否 tradeUuid、billCode不可同时为空,都不为空时使用tradeUuid
source 来源 String 是 QERP_CN、QERP_ASIA、QERP_CN_MALL、QERP_ASIA_MALL
billCode 支付账单号 String 否 tradeUuid、billCode不可同时为空
orderCode 订单号 String 否
amount 退款金额 Bigdecimal 是 xendit QRIS支付的订单,只支持全额退款
reason 原因 String 是 FRAUDULENT、DUPLICATE、REQUESTED_BY_CUSTOMER、CANCELLATION、OTHERS
metadata 自定义数据 String 否 例:{ "my_custom_id": "merchant-123", "my_custom_order_id": "order-123" }

返回信息:

字段名 字段描述 类型 必填 备注
status 退款状态 String 是 退款状态枚举
refundTime 退款时间 String 否 ISO 8601 date-time format
errorCode 失败编码 String 否
errorMessage 失败信息 String 否
platformRefundId 平台唯一退款id String 否

请求示例:

{ "refundUuid": "uuid1", "tradeUuid": "uuid1", "source": "uuid1", "billCode": "billCode1", "orderCode": "S0001", "amount": 1000, "reason": "REQUESTED_BY_CUSTOMER", "metadata": "" }

返回示例:

{ "status": "REFUND_SUCCESS", "refundTime": "", "errorCode": "" "errorMsg": "" "platformRefundId": "" }

9. 退款查询

url:

  • /queryRefund

接口参数:

字段名 字段描述 类型 必填 备注
source 来源 String 是 QERP_CN、QERP_ASIA、QERP_CN_MALL、QERP_ASIA_MALL
refundUuidList 退款uuid String 否 refundUuid、refundBillCode、tradeUuid、billCode不可同时为空。按文档字段顺序优先取第一个不为空的字段
refundBillCodeList 退款账单号 String 否
tradeUuidList 支付uuid String 否
billCodeList 支付账单号 String 否

返回信息:

字段名 字段描述 类型 必填 备注
tradeUuid 支付时uuid String 是
billCode 支付账单号 String 是
refundUuid 退款请求uuid String 是
refundBillCode 退款账单号 String 是
orderCode 订单号 String 是
status 退款状态 String 是 退款状态枚举
refundTime 退款时间 Date 否
errorCode 失败编码 String 否 支付失败时必传
errorMessage 失败信息 String 否
platformRefundId 平台唯一退款id String 是

请求示例:

{ "source": "QERP_CN", "tradeUuid": "uuid1", "billCode": "billCode1", "refundUuid": "uuid1", "refundBillCode": "" }

返回示例:

[ { "tradeUuid": "uuid1", "billCode": "billCode1", "refundUuid": "refundId", "refundBillCode": "refundBillCode", "orderCode": "O20250804001", "status": "WAIT", "refundTime": "", "errorCode": "" "platformRefundId": "" } ]

10. Webhook

11. 支付状态通知

url:

  • /qlink/payNotification

接口参数:

字段名 字段描述 类型 必填 备注
tradeUuid 请求uuid String 是 需要唯一
billCode 支付账单号 String 是
orderCode 订单号 String 是
paymentRequestId 订单号 String 是
status 支付状态 String 是 支付状态枚举
payTime 支付时间 Date 否 支付成功时必传
errorCode 失败编码 String 否 支付失败时必传
notificationTime Long 是

请求示例:

{ "tradeUuid": "uuid1", "billCode": "billCode1", "orderCode": "O20250804001", "paymentRequestId": "O20250804001", "status": "WAIT", "payTime": "", "errorCode": "" "notificationTime": 1756191428000 }

12. 退款通知

url:

  • /qlink/refundNotification

接口参数:

字段名 字段描述 类型 必填 备注
refundUuid 退款请求uuid String 是 需要唯一
refundBillCode 退款账单号 String 是
tradeUuid 支付时uuid String 是
billCode 支付账单号 String 是
orderCode 订单号 String 是
status 退款状态 String 是 退款状态枚举
refundTime 退款时间 Date 否
errorCode 失败编码 String 否 支付失败时必传
notificationTime 通知时间 Long 是
platformRefundId 平台唯一退款id String 是

请求示例:

{ "refundUuid": "refundId", "refundBillCode": "refundBillCode", "tradeUuid": "uuid1", "billCode": "billCode1", "orderCode": "O20250804001", "status": "WAIT", "refundTime": "", "errorCode": "" "notificationTime": 1756191428000, "platformRefundId": "" }

© Copyright QianYi Team 2025 All Rights Reserved            Updated 2026-11-06 08:56:45

results matching ""

    No results matching ""