ABCPAY / 开放接口

商户接口文档

接口使用 HTTPS、POST、UTF-8 JSON。路径统一以 /abcpay 开头。请在商户后台取得商户号和 API 密钥,并使用正式配置的接口域名作为请求地址。

接入规则与签名

所有接口都需要以下四个请求头。时间戳为 Unix 秒,与服务端相差不超过 300 秒;随机串为 16–64 位英数字、下划线或短横线,同一商户 10 分钟内不可重复。

请求头填写内容
Abcpay-Merchant商户号
Abcpay-TimestampUnix 秒时间戳
Abcpay-Nonce每次请求重新生成的随机串
Abcpay-Signature使用 API 密钥计算的小写十六进制 HMAC-SHA256;验签接受大小写十六进制

先对实际发送的原始请求体 UTF-8 字节求 SHA-256 小写十六进制值,再按下面六行拼接签名原文,行间仅使用换行符 \n,末尾不加换行。路径不含域名和查询串。空请求体使用空字符串的摘要。

ABCPAY-OPEN-1
POST
/abcpay/collection/create
{Abcpay-Timestamp}
{Abcpay-Nonce}
{SHA256_HEX(原始请求体)}

Abcpay-Signature = HMAC_SHA256_HEX(API密钥, 签名原文)。签名后不得重新排列 JSON 字段、改动空格或重新序列化请求体。

统一响应

{"requestId":"abc_示例请求标识","success":true,"error":null,"data":{...}}

失败时 success=false,error 包含 code 和 message;排查时提供 requestId。HTTP 状态码也反映失败类别。

接口目录

  1. 代收下单
  2. 代付下单
  3. 查余额
  4. UPI 查询
  5. UTR 查询
  6. 代收回调
  7. 代付回调
  8. 订单查询

1. 代收下单

POST /abcpay/collection/create。按已开通的代收产品创建订单,返回收银台地址及可用支付信息。

字段必填说明
merchantOrderNo是商户订单号,1–64 位;首位为英数字,其余可使用英数字、点、下划线、冒号和短横线。每个商户自行保证唯一;ABCT、ABCP 前缀留给平台测试单。
channelCode是商户已开通的代收产品编码。
amount是INR 金额,大于 0,最多两位小数。
callbackUrl是本单代收回调地址,HTTP 或 HTTPS 完整 URL;正式环境建议 HTTPS。
redirectUrl否支付完成后的浏览器返回地址。
payerInfo否付款人资料:name、idType、idNumber、bankAccount、mobile、expiry、cvv;按产品要求填写。
extension否附加 JSON 数据;由对应产品解释。
POST /abcpay/collection/create
{"merchantOrderNo":"C-20261013-001","channelCode":"示例代收产品编码","amount":1500.00,"callbackUrl":"https://merchant.example/notify/collection","redirectUrl":"https://merchant.example/result"}
{"requestId":"abc_...","success":true,"error":null,"data":{"merchantOrderNo":"C-20261013-001","paymentUrl":"https://...","upiText":"...","paymentLinks":[],"orderState":"processing"}}

paymentLinks 中每项包含 app、label、url。创建成功表示订单已受理,最终状态通过回调或订单查询确认。

2. 代付下单

POST /abcpay/payout/create。按已开通的代付产品发起出款。

字段必填说明
merchantOrderNo是商户订单号,格式与代收一致,并须在商户维度保持唯一。
channelCode是商户已开通的代付产品编码。
amount是INR 金额,大于 0,最多两位小数。
callbackUrl是本单代付回调地址。
beneficiary是收款人对象;account 为账号、name 为姓名,均必填;ifsc 按产品要求填写。
POST /abcpay/payout/create
{"merchantOrderNo":"P-20261013-001","channelCode":"示例代付产品编码","amount":100.00,"callbackUrl":"https://merchant.example/notify/payout","beneficiary":{"account":"000000000000","name":"TEST USER","ifsc":"ABCD0001234"}}
{"requestId":"abc_...","success":true,"error":null,"data":{"merchantOrderNo":"P-20261013-001","platformOrderNo":"...","orderState":"processing"}}

受理状态不是到账证明。请以终态回调或订单查询为准。

3. 查余额

POST /abcpay/wallet/balance。请求体使用 {};签名必须包含实际发送的请求体。

{"requestId":"abc_...","success":true,"error":null,"data":{"merchantNo":"ABC-示例商户号","balance":0.00,"availableBalance":0.00,"frozenBalance":0.00,"currency":"INR"}}

balance 为总余额,availableBalance 为可用余额,frozenBalance 为冻结余额。

4. UPI 查询

POST /abcpay/upi/query。查询指定 UPI 是否已登记在 ABCPAY 的平台 UPI 名录中。

{"upiAddress":"merchant@bank"}
{"requestId":"abc_...","success":true,"error":null,"data":{"upiAddress":"merchant@bank","platformUpi":false}}

platformUpi=false 仅表示未命中平台名录,不能据此判断任意外部 UPI 的真实性或可收款状态。

5. UTR 查询

POST /abcpay/utr/query。仅查询当前商户可见的 UTR 记录;bankUtr 最多 50 字符。

{"bankUtr":"123456789012"}
{"requestId":"abc_...","success":true,"error":null,"data":{"bankUtr":"123456789012","matched":true,"merchantOrderNo":"C-20261013-001","orderAmount":1500.00}}

未命中时返回 matched=false,订单字段不出现。

6. 代收回调

代收成功后,ABCPAY 向建单时的 callbackUrl 发送 POST JSON。回调使用与商户请求相同的四个 Abcpay-* 请求头和签名算法;签名路径为商户回调 URL 的路径部分。

{"noticeId":"ABCNC123_completed","noticeType":"collection.success","merchantOrderNo":"C-20261013-001","requestedAmount":1500.00,"actualAmount":1500.00,"orderState":"completed","bankUtr":"123456789012","eventTime":1791820000}

noticeId 标识这笔订单的事件,重试时保持一致。商户应先验签,再按 noticeId 幂等处理。

7. 代付回调

代付状态变化时,ABCPAY 向该单的 callbackUrl 发送 POST JSON,签名规则与代收回调相同。

{"noticeId":"ABCNP456_completed","noticeType":"payout.status","merchantOrderNo":"P-20261013-001","platformOrderNo":"...","requestedAmount":100.00,"actualAmount":100.00,"orderState":"completed","bankUtr":"123456789013","eventTime":1791820000}

orderState 可能为 processing、completed、failed 或 returned;同一订单不同状态拥有不同 noticeId。商户需按订单状态处理,不能把收到回调等同于出款成功。

两类回调共同的确认规则

商户处理完成后返回 HTTP 2xx,响应体原始字节必须精确为 ACK,不能附加空格、换行、引号或 JSON 包装。其他响应会进入重试;回调可能重复,请按 noticeId 去重,并可用订单查询复核。

8. 订单查询

POST /abcpay/order/query。一个入口查询代收或代付订单,只返回当前商户名下的结果。

字段必填说明
businessType是COLLECTION 表示代收;PAYOUT 表示代付,区分大小写。
merchantOrderNo是下单时提交的商户订单号。
{"businessType":"COLLECTION","merchantOrderNo":"C-20261013-001"}
{"requestId":"abc_...","success":true,"error":null,"data":{"businessType":"COLLECTION","merchantOrderNo":"C-20261013-001","requestedAmount":1500.00,"actualAmount":1500.00,"orderState":"completed","bankUtr":"123456789012"}}

代付结果包含 businessType、merchantOrderNo、requestedAmount、orderState、bankUtr。状态统一使用 processing、completed、failed;代付另可能返回 returned。

错误处理

HTTP错误码示例处理建议
400INPUT_JSON、INPUT_INVALID检查 JSON、字段格式和金额。
401AUTH_HEADERS、AUTH_FORMAT、AUTH_TIME、AUTH_EXPIRED、AUTH_MERCHANT、AUTH_SEAL检查商户号、时间戳、请求头和原文签名。
403AUTH_ORIGIN检查请求来源限制。
409AUTH_REPLAY为每次请求生成新的随机串。
422INBOUND_REJECTED、OUTBOUND_REJECTED、INBOUND_MISSING、OUTBOUND_MISSING、FUNDS_UNAVAILABLE核对产品开通与订单资料;不确定是否建单成功时,先查单再决定是否重试。
500SERVICE_ERROR记录 requestId 后联系支持;下单超时先查单。

文中的商户号、产品编码、订单号、URL 和 UTR 均为示例,不可作为真实联调凭据。