EN

XPay 商户对接文档

版本 v1 · 面向下游商户的代收 / 代付 / 查询接口

网关地址:https://api.xpay24.net

概述与基础约定

本文档面向接入 XPay 的下游商户,描述代收(收款)、代付(出款)及各类查询接口的调用方式。请先通读本节的基础约定。

项目说明
网关地址https://api.xpay24.net
商户号 / 密钥由 XPay 开户时提供。merchantId(数字商户号)+ secretKey(签名密钥)。
请求方式全部为 POSTContent-Type: application/json;charset=UTF-8
金额单位派萨 / 分(paise),整数。例:100.00 卢比 → 传 10000
timestamp毫秒级时间戳(long)。服务器校验有效期为 ±5 分钟,过期拒绝。
字符编码UTF-8
请求成功(code=200)≠ 付款成功。 下单接口返回 200 仅表示受理成功,最终支付/出款结果以异步回调或查询接口为准

签名规则

所有接口都需要签名字段 sign(MD5,32 位小写十六进制)。根据接口是否携带订单号,签名公式分两种:

① 带订单号的接口(下单、补单、订单查询)

SIGN sign = md5( orderId + timestamp + secretKey )

② 不带订单号的接口(UPI 查询 / UTR 查询 / 余额查询)

SIGN sign = md5( merchantId + timestamp + secretKey )
拼接时直接把值按顺序连成一个字符串再做 MD5,中间无任何分隔符。用于签名的 timestamp 必须与请求体里的完全一致。

签名示例

orderId=ORDER20260720001timestamp=1785000000000secretKey=your_secret_key

待签字符串 = "ORDER202607200011785000000000your_secret_key"
sign = md5(上面字符串) = 32位小写
验证回调签名时:sign 字段本身不参与运算,用其余参数按同样公式算出签名再与 sign 比对。

代收下单

创建一笔代收(收款)订单,成功后返回支付链接 paymentUrl,引导用户完成支付。

POST /v1/orders/create

请求参数

字段类型必填说明
merchantIdlong商户号
amountlong金额(派萨/分),整数
currencystring币种,默认 INR
orderIdstring商户订单号(≤50,商户侧唯一)
notifyUrlstring接收本笔订单异步回调的地址(≤255)
idempotencyKeystring幂等键;相同键重复提交返回同一订单
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey)

请求示例

POST /v1/orders/create
{
  "merchantId": 101,
  "amount": 10000,
  "currency": "INR",
  "orderId": "ORDER20260720001",
  "notifyUrl": "https://your-site.com/xpay/collect/notify",
  "timestamp": 1785000000000,
  "sign": "e10adc3949ba59abbe56e057f20f883e"
}

响应参数

字段类型说明
codeint200 = 受理成功
msgstring提示信息 / 错误码
payOrderIdstringXPay 平台订单号
orderNostring平台订单号(同 payOrderId)
orderIdstring商户订单号(原样返回)
amountlong金额(分)
currencystring币种
statusstring订单状态,下单成功为 INITIATED(待支付)
paymentUrlstring支付链接(透传):由上游返回、XPay 原样透传给商户,商户直接用它拉起收银台供用户支付。仅成功时返回。

响应示例

{
  "code": 200,
  "msg": "Success",
  "payOrderId": "X_PAYIN2607201230482KQ",
  "orderNo": "X_PAYIN2607201230482KQ",
  "orderId": "ORDER20260720001",
  "amount": 10000,
  "currency": "INR",
  "status": "INITIATED",
  "paymentUrl": "https://<上游收银台链接,原样透传>"
}

代收补单(UTR)

当用户已完成付款但订单仍未自动置为成功时,商户可提交银行流水号 UTR 进行人工补单。系统会向上游核验该 UTR,核验通过即置为成功。

POST /v1/orders/complete-with-utr

请求参数

字段类型必填说明
merchantIdlong商户号
orderIdstring商户订单号
utrstring银行流水号 UTR(≤50)
remarkstring备注
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey)

响应示例

{
  "code": 200,
  "msg": "Success",
  "orderNo": "X_PAYIN2607201230482KQ",
  "orderId": "ORDER20260720001",
  "amount": 10000,
  "currency": "INR",
  "status": "SUCCESS"
}
若该 UTR 已被其它订单占用,或上游核验未通过,接口返回相应错误码(code≠200),订单状态不变。

代收订单查询

按商户订单号查询代收订单当前状态。

POST /v1/query/collect/status

请求参数

字段类型必填说明
merchantIdlong商户号
orderIdstring商户订单号
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey)

响应参数

字段类型说明
codeint200 = 成功,404 = 订单不存在
msgstring提示信息
statusstringINITIATED 待支付SUCCESS 成功REFUNDED 已退款
amountlong金额(分)
orderNostring平台订单号
utrstring银行流水号(成功且已回填时返回)

响应示例

{
  "code": 200,
  "msg": "Success",
  "status": "SUCCESS",
  "amount": 10000,
  "orderNo": "X_PAYIN2607201230482KQ",
  "utr": "123456789012"
}

代收异步回调

当代收订单支付成功或失败时,XPay 会主动 POST(JSON)到你下单时传入的 notifyUrl。仅在成功/失败时推送。

通知参数

字段类型说明
amountlong金额(分)
merchantIdlong商户号
orderIdstring商户订单号
payOrderIdstring平台订单号
statusint1 = 支付成功2 = 支付失败
utrstring银行流水号(成功时可能返回,否则为 null
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey),用于验签

通知示例

POST https://your-site.com/xpay/collect/notify
Content-Type: application/json
X-Signature: <HmacSHA256(body, secretKey) 十六进制,附加校验头>

{
  "amount": 10000,
  "merchantId": 101,
  "orderId": "ORDER20260720001",
  "payOrderId": "X_PAYIN2607201230482KQ",
  "status": 1,
  "utr": "123456789012",
  "timestamp": 1785000000000,
  "sign": "a1b2c3d4e5f6..."
}
验签:用请求体里除 sign 外的参数,按 md5(orderId + timestamp + secretKey) 算出后与 sign 比对。请求头 X-Signature 是对整个 body 的 HmacSHA256(十六进制)附加校验,可选用于额外完整性校验。
商户必须在 5 秒内返回字符串 SUCCESSOK(HTTP 2xx)。否则视为接收失败,XPay 约每 5 分钟重推一次、最多 5 次。请先验签再处理业务,并做好幂等(同一订单可能被推送多次)。

代付下单

发起一笔代付(出款)订单。受理成功后进入处理中,最终结果以异步回调或查询为准。

POST /v1/payouts/create
IP 白名单:代付接口要求来源 IP 在商户白名单内,否则返回 IP error。请提前把出款服务器 IP 提供给 XPay 加入白名单。

请求参数

字段类型必填说明
merchantIdlong商户号
amountlong金额(分)
currencystring默认 INR
orderIdstring商户订单号(≤50)
notifyUrlstring代付结果回调地址(≤255)
payoutTypestring出款类型:IMPSUPI
accountHolderstring收款人姓名(仅英文字母或空格,3–50)
accountNumberstring收款账号(5–35);UPI 出款时填收款 UPI 地址
ifscstring条件IMPS 出款必填;UPI 出款可不填
idempotencyKeystring幂等键
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey)

请求示例

POST /v1/payouts/create
{
  "merchantId": 101,
  "amount": 50000,
  "currency": "INR",
  "orderId": "PAYOUT20260720001",
  "notifyUrl": "https://your-site.com/xpay/payout/notify",
  "payoutType": "IMPS",
  "accountHolder": "RAHUL KUMAR",
  "accountNumber": "1234567890",
  "ifsc": "SBIN0001234",
  "timestamp": 1785000000000,
  "sign": "5f4dcc3b5aa765d61d8327deb882cf99"
}

响应示例

{
  "code": 200,
  "msg": "Success",
  "payoutNo": "X_PAYOUT2607201230477QN",
  "orderId": "PAYOUT20260720001",
  "amount": 50000,
  "currency": "INR",
  "status": "PROCESSING"
}
受理成功后订单进入 PROCESSING(处理中);若被上游同步拒绝,进入人工处理并携带拒绝原因。最终以异步回调为准。

代付订单查询

POST /v1/query/payout/status

请求参数

字段类型必填说明
merchantIdlong商户号
orderIdstring商户订单号
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey)

响应参数

字段类型说明
codeint200 = 成功,404 = 不存在
msgstring提示信息
statusstringINITIATED 待处理PROCESSING 处理中SUCCESS 成功FAILED 失败
amountlong金额(分)
orderNostring平台代付单号
utrstring银行流水号(成功时返回)

代付异步回调

代付成功或失败时,XPay 主动 POST(JSON)到 notifyUrl

通知参数

字段类型说明
amountlong金额(分)
merchantIdlong商户号
orderIdstring商户订单号
payOrderIdstring平台代付单号
statusint1 = 代付成功2 = 代付失败
statusDescstring状态描述:success / failed
utrstring银行流水号(成功时返回,否则 null
timestamplong毫秒时间戳
signstringmd5(orderId + timestamp + secretKey)

通知示例

{
  "amount": 50000,
  "merchantId": 101,
  "orderId": "PAYOUT20260720001",
  "payOrderId": "X_PAYOUT2607201230477QN",
  "status": 1,
  "statusDesc": "success",
  "utr": "998877665544",
  "timestamp": 1785000000000,
  "sign": "a1b2c3d4e5f6..."
}
同代收回调:5 秒内返回 SUCCESSOK,否则约每 5 分钟重推、最多 5 次。请先验签再处理、并做幂等。代付失败时款项退回商户余额。

UPI 归属查询

查询某个 UPI 地址是否属于本平台通道。

POST /v1/query/upi/query

请求参数

字段类型必填说明
merchantIdlong商户号
upistring待查询的 UPI 地址
timestamplong毫秒时间戳
signstringmd5(merchantId + timestamp + secretKey)

响应参数

字段类型说明
belongsToUsbooltrue = 属于本平台,false = 不属于
messagestring说明

响应示例

{
  "belongsToUs": true,
  "message": "UPI belongs to current platform"
}

UTR 到账查询

按银行流水号 UTR 查询是否到账、是否已被订单匹配。

POST /v1/query/utr

请求参数

字段类型必填说明
merchantIdlong商户号
utrstring银行流水号 UTR
timestamplong毫秒时间戳
signstringmd5(merchantId + timestamp + secretKey)

响应参数

字段类型说明
receivedbool是否已到账
matchedbool是否已被订单匹配
matchedOrderIdstring匹配到的商户订单号(matched=true 时)
amountlong金额(分,若有)
messagestring说明。未到账时系统自动挂入排查轮询

余额查询

POST /v1/query/balance

等价接口:POST /v1/balance/query

请求参数

字段类型必填说明
merchantIdlong商户号
timestamplong毫秒时间戳
signstringmd5(merchantId + timestamp + secretKey)

响应示例

{
  "balance": 1234500
}
字段类型说明
balancelong可用余额(分)

错误码

接口失败时通过 code / msg 返回。常见错误:

msg含义
Signature verification failed签名错误
Timestamp expired时间戳超出 ±5 分钟
Invalid merchantId商户号不存在
Merchant is currently disabled商户已被禁用
IP not whitelisted代付来源 IP 不在白名单
Amount out of range金额超出限额
Duplicate orderId订单号重复
Insufficient balance商户余额不足(代付)
Order not found订单不存在

集成步骤

代收

1. 调 /v1/orders/create 下单;
2. 用返回的 paymentUrl(上游透传)打开收银台供用户支付;
3. 接收异步回调(notifyUrl),验签后按 status 处理订单,返回 SUCCESS
4. 需要时用 /v1/query/collect/status 主动查询兜底。

代付

1. 把出款服务器 IP 提供给 XPay 加白名单;
2. 调 /v1/payouts/create 发起出款;
3. 接收异步回调,验签后处理结果;
4. 需要时用 /v1/query/payout/status 查询。

务必:金额用分为单位;每次请求 timestamp 用当前毫秒时间;回调一律先验签再处理并做幂等;一切支付结果以异步回调 / 查询接口为准。

XPay 商户对接文档 · v1 · 如有疑问请联系对接技术支持