WinniePay API 文档
V1 · INR 中文English

开始接入

通过 WinniePay API 在印度收款(代收)和付款到银行账户(代付),币种为 INR。

基本约定

  • 代收:创建订单后,付款人在收银台或用 UPI 付款;付款成功后平台回调通知你。
  • 代付:从可用余额付款到收款人的印度银行账户,结果通过回调通知。
  • 订单号:merchant_order_id 是你的订单号,platform_order_id 是平台订单号。查询用你的订单号;联系平台时请提供平台订单号。
  • 金额:INR 字符串,最多两位小数,例如 "1000.00"。不要用浮点数处理金额。
  • 时间:带时区的 ISO 8601,例如 2026-11-03T12:00:00+05:30。

接入准备

在商户后台“API 配置”中完成:

  1. 商户编号和接入地址:页面上直接显示。接口地址为 接入地址 + /api/v1/…。
  2. API 密钥:创建时选择权限。密钥只显示一次,请保存在服务器上,不要放进网页或 App。
  3. 回调密钥:配置回调时生成,用来验证平台发来的回调,和 API 密钥不是同一把。
  4. IP 白名单(可选):设置后只接受这些 IP 的请求。
  5. 回调域名:notify_url 的域名需要先开通,请把域名发给平台对接人。

API 密钥权限

权限可调用
payins:create创建代收、提交 UTR、申请补单
payins:read查询代收、UTR、补单和 UPI
payouts:create创建代付
payouts:read查询代付和获取回执
balances:read查询余额

请求格式

  • 全部接口为 HTTPS POST,请求头 Content-Type: application/json。
  • 正文是 UTF-8 JSON 对象,参数都放在正文里,不用 URL 参数,最大 32 KB。
  • 正文必须有 merchant_id 和 sign,不能有文档以外的字段。
  • 错误信息默认中文;需要英文时加请求头 Accept-Language: en。

重复提交与重试

  • 商户订单号用于防重复:相同订单号、相同内容再次创建,返回原订单,不会重复收款或付款。
  • 相同订单号、不同内容会被拒绝。
  • 超时或系统错误时,先查询原订单,再用相同参数重试。不要换新订单号重新提交,否则可能产生两笔订单。
  • 代付为 PENDING 时仍在处理,请等待最终结果,不要重新付款。

请求签名

HMAC-SHA256 签名放在 JSON 正文的 sign 字段,不需要额外的鉴权请求头。

计算步骤

  1. 取正文中除 sign 外的全部字段(包括 merchant_id)。
  2. 按键名排序(嵌套对象也排序),生成无空格的紧凑 JSON。中文等字符保持原样,不转成 \u;金额等小数必须是字符串。
  3. 签名原文 = POST + 换行 + 接口路径 + 换行 + 第 2 步的 JSON,末尾不加换行。
  4. 用 API 密钥对签名原文做 HMAC-SHA256,取 64 位小写十六进制,填入 sign。

签名错误、商户编号错误或密钥失效,都返回同一个签名错误提示,不说明具体原因。

代码示例

各接口示例中的 call() 即此处定义
# 需要 jq 和 openssl
API_HOST="https://<api-host>"        # 接入地址,见商户后台“API 配置”
API_SECRET="<your API secret>"       # API 密钥,只保存在服务端
API_PATH="/api/v1/payins/query"
BODY='{"merchant_id":"10001","merchant_order_id":"ORDER-10001"}'

# 去掉 sign,按键名排序,生成紧凑 JSON
CANONICAL=$(printf '%s' "$BODY" | jq -cS 'del(.sign)')
SIGN=$(printf 'POST\n%s\n%s' "$API_PATH" "$CANONICAL" \
  | openssl dgst -sha256 -hmac "$API_SECRET" | awk '{print $NF}')

curl -X POST "$API_HOST$API_PATH" \
  -H "Content-Type: application/json" \
  -d "$(printf '%s' "$CANONICAL" | jq -c --arg sign "$SIGN" '. + {sign: $sign}')"

核对示例

用示例密钥算出的 sign 应与下方一致
示例密钥sample_secret_for_docs_only
接口路径/api/v1/payins/query
正文(不含 sign){"merchant_id": "10001", "merchant_order_id": "ORDER-10001"}
签名原文
POST
/api/v1/payins/query
{"merchant_id":"10001","merchant_order_id":"ORDER-10001"}
sign
5ab9bc491be52b3427b0ccaf9239448874b8212416738493509ffea4bc35d298

状态与错误

HTTP 状态表示请求是否处理成功,订单 status 表示业务结果,两者分开判断。

响应格式

  • 成功:HTTP 200,code 为 200,结果在 data 中。
  • 失败:HTTP 500,code 为 500,data 为 null,message 说明原因。
  • 每个响应都有 X-Request-ID 响应头,反馈问题时请一并提供。
{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "ORDER-10001",
    "platform_order_id": "PI2026110312000000012345678",
    "amount": "1000.00",
    "paid_amount": "1000.00",
    "status": "SUCCESS",
    "merchant_fee": "40.00",
    "utr": "123456789012",
    "created_at": "2026-11-03T12:00:00+05:30",
    "paid_at": "2026-11-03T12:03:10+05:30",
    "callback_at": "2026-11-03T12:03:12+05:30",
    "test": false
  }
}

错误信息

message处理方法
签名验证失败,请检查商户编号、API 密钥和签名方法按“签名”一节核对签名原文;确认商户编号正确、密钥未撤销。
请求来源 IP 不在 API 白名单内在商户后台把服务器出口 IP 加入 API 白名单。
API 密钥没有该接口的权限为该密钥开通对应权限,或换用有权限的密钥。
该产品未开通联系平台开通该产品。
商户账户未启用或已暂停联系平台确认账户状态。
请求参数缺失、多余或格式不正确对照接口的请求字段表检查字段名、必填项和格式。
bank_account 信息不完整或格式不正确:需要收款人姓名、银行账号、IFSC、银行名称、印度手机号和邮箱补全并检查收款人银行账户的六项信息。
收款 UPI 信息不完整或格式不正确检查收款 UPI 是否填写完整、格式正确。
请求正文不是有效的 JSON确认正文是 UTF-8 编码的 JSON 对象,且没有重复的键。
请求头 Content-Type 需为 application/json设置请求头 Content-Type: application/json。
请求正文超过 32 KB缩小正文,例如减少 extra 的内容。
订单不存在,或接口地址不正确确认商户订单号和接口路径。
接口只接受 POST 请求改用 POST。
无法按请求的格式返回,请接受 application/json去掉请求头 Accept,或设为 application/json。
该商户订单号已使用过,本次内容与原订单不一致同一订单号只能对应一份内容;新订单请换新单号。
请求与订单当前状态冲突先查询订单的当前状态,再决定下一步操作。
订单当前状态不允许此操作先查询订单的当前状态;已完成的订单不能再做此操作。
正在分配 UPI,请用原商户订单号和相同参数重试稍后用原单号和相同参数重试,或查询订单。
分配 UPI 超时,请用原商户订单号和相同参数重试用原单号和相同参数重试,或查询订单。
暂无可用通道,请联系平台稍后重试;持续出现时联系平台。
可用余额不足,无法创建代付先查询余额;等有新的代收入账后再创建代付,或减少代付金额。
收款人在黑名单中,不能出款收款人在黑名单中,不能向这个账户出款。
测试订单金额的个位须为 1(成功)或 0(失败)接入测试时,金额的个位用 1 测成功、用 0 测失败,例如 101.00、100.00。
请求过于频繁,请稍后重试降低请求频率后重试。
系统错误,请先查询原订单再决定是否重试先查询原订单,再决定是否重试;持续出现时联系平台并提供 X-Request-ID。

代收订单状态

状态含义
ALLOCATING正在分配收款 UPI,请稍后查询。
PENDING等待付款。超过付款期限后如果仍确认到账,订单也会变为成功并发送回调。
SUCCESS成功:付款人按应付金额付款,按订单金额入账。
SUCCESS_UNDERPAID少付成功:实际到账少于应付金额,按实际到账入账。
SUCCESS_OVERPAID多付成功:实际到账多于应付金额,按实际到账入账。
CREATE_TIMEOUT分配收款资料超时,订单无法付款。
NO_AVAILABLE_CHANNEL暂无可用通道,订单无法付款。
SYSTEM_ERROR系统异常,订单无法付款。请联系平台。
CREATE_FAILED订单创建失败,无法付款。

以 SUCCESS 开头的三种状态都是最终结果,钱已到账;给付款人上分请使用 paid_amount。

代付订单状态

状态含义
PENDING处理中。结果未确定前请勿重新付款。
SUCCESS付款成功。
FAILED付款失败,冻结金额已退回可用余额。
REFUND原已成功的付款被冲正,金额和手续费已退回可用余额。

SUCCESS、FAILED、REFUND 是最终结果;SUCCESS 之后仍可能变为 REFUND。

UTR 状态

状态含义
RECEIVED已确认到账。
AVAILABLE_FOR_SUPPLEMENT已确认到账且未关联订单,可以申请补单。
NOT_FOUND未查到该 UTR。
PAYMENT_FAILED该笔银行转账失败。
CLAIMED_BY_OTHER_MERCHANT该 UTR 已被其他商户认领。
INVALID_FORMATUTR 格式不正确。
ERROR暂时无法查询,请稍后重试。

回调通知

订单有最终结果时,平台向创建订单时的 notify_url 发送 JSON 格式的 POST 请求。

POSTnotify_url
Content-Type: application/jsonUTF-8INR

何时发送

  • 代收:付款成功(SUCCESS、SUCCESS_UNDERPAID、SUCCESS_OVERPAID)时发送,含 paid_amount。未付款的订单没有回调,请用查询接口确认。
  • 代付:成功(SUCCESS)、失败(FAILED)或冲正(REFUND)时发送。

{ }回调字段

Body · application/json
字段类型说明
merchant_idstring商户编号。
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
statusstring订单状态。代收:SUCCESS、SUCCESS_UNDERPAID、SUCCESS_OVERPAID;代付:SUCCESS、FAILED、REFUND。
amountstring订单金额(创建时提交的金额)。
INR,字符串,最多两位小数,如 "1000.00"
paid_amountstring仅代收:应上分金额,规则同查询接口。
INR,字符串,最多两位小数,如 "1000.00"
merchant_feestring本单手续费;代付失败时为 "0.00"。
INR,字符串,最多两位小数,如 "1000.00"
messagestring成功时为 success;代付失败时为失败原因;冲正时为 refund。
completed_atstring | null付款成功时间;代付失败时为 null。
带时区的 ISO 8601 时间
utrstring | null仅代付:银行交易参考号。
extraobject仅代付:创建订单时提交的 extra,未提交时为 {}。
testboolean是否为测试订单。用测试密钥创建的订单为 true,只走测试通道,不产生真实资金。
signstring回调签名,用回调密钥计算,验证方法见下文。

回调示例

代收成功
JSON
{
  "merchant_id": "10001",
  "merchant_order_id": "ORDER-10001",
  "platform_order_id": "PI2026110312000000012345678",
  "status": "SUCCESS",
  "amount": "1000.00",
  "paid_amount": "1000.00",
  "merchant_fee": "40.00",
  "message": "success",
  "completed_at": "2026-11-03T12:05:00+05:30",
  "sign": "<64 hex>"
}

验证与应答

  1. 用回调密钥验证 sign:与请求签名第 1、2 步相同,但签名原文只有排序后的 JSON,没有 POST 和路径。
  2. 验证通过后记录结果。同一订单的同一状态可能收到多次,请按 platform_order_id 和 status 去重。
  3. 返回 HTTP 200、Content-Type: text/plain,正文为小写 success,不带空格、换行或 JSON。其他应答都视为未收到。
# 需要 jq 和 openssl
# callback.json 为收到的回调正文
CALLBACK_SECRET="<your callback secret>"   # 回调密钥(不是 API 密钥)

SIGN=$(jq -r '.sign' callback.json)
EXPECTED=$(jq -cjS 'del(.sign)' callback.json \
  | openssl dgst -sha256 -hmac "$CALLBACK_SECRET" | awk '{print $NF}')

[ "$SIGN" = "$EXPECTED" ] && echo valid || echo invalid
text/plain
success

重试

未收到有效应答时,平台会重试,共最多 7 次:首次失败后约 1 分钟、5 分钟、15 分钟、1 小时、6 小时、24 小时。每次请求等待 5 秒。重试用完后,可以在商户后台“回调记录”中重新发送。

创建代收订单

创建一笔 INR 代收订单,返回收银台地址和付款资料。把 checkout_url 交给付款人,或使用 upi / deeplink 在自己的页面发起付款。

POST/api/v1/payins
Content-Type: application/jsonUTF-8权限 payins:create

创建成功只表示订单已建立,付款结果以查询或回调为准。

如果返回“正在分配 UPI”或请求超时,请用相同的商户订单号和相同参数重试,或先查询订单;不要换新单号重新提交。

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填商户订单号,在本商户内唯一。
1–128 位,可用字母、数字和 _ : . - /
amountstring必填订单金额。单笔范围以平台为本商户开通的配置为准。
INR,字符串,最多两位小数,如 "1000.00"
notify_urlstring必填接收本单结果通知的地址,见“回调通知”。
HTTPS,最长 2048 字符,域名需由平台开通
return_urlstring必填付款成功后,收银台把付款人带回的页面。
HTTPS,最长 2048 字符
extraobject可选自定义数据,平台原样保存。
JSON 对象,最大 4096 字节,最多 5 层

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "ORDER-10001",
  "amount": "1000.00",
  "notify_url": "https://merchant.example.com/payin/notify",
  "return_url": "https://merchant.example.com/payin/done",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "platform_order_id": "PI2026110312000000012345678",
    "merchant_order_id": "ORDER-10001",
    "amount": "1000.00",
    "payable_amount": "1000.00",
    "checkout_url": "https://pay.example.com/c/AbCdEf",
    "upi": "merchant@bank",
    "deeplink": "upi://pay?pa=merchant@bank&am=1000.00"
  }
}

响应字段

data
字段类型说明
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
merchant_order_idstring商户订单号。
amountstring订单金额(创建时提交的金额)。
INR,字符串,最多两位小数,如 "1000.00"
payable_amountstring | null付款人实际应付金额,可能与订单金额不同;以此金额展示给付款人。暂未确定时为 null。
INR,字符串,最多两位小数,如 "1000.00"
checkout_urlstring | null收银台地址;订单当前无法付款时为 null。
upistring | null收款 UPI 地址;未提供时为 null。
deeplinkstring | nullUPI 付款链接或参数,请原样使用,不要自行添加或修改前缀。未提供时为 null。

查询代收订单

按商户订单号查询一笔代收订单。

POST/api/v1/payins/query
Content-Type: application/jsonUTF-8权限 payins:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填创建订单时提交的商户订单号。

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "ORDER-10001",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "ORDER-10001",
    "platform_order_id": "PI2026110312000000012345678",
    "amount": "1000.00",
    "paid_amount": "1000.00",
    "status": "SUCCESS",
    "merchant_fee": "40.00",
    "utr": "123456789012",
    "created_at": "2026-11-03T12:00:00+05:30",
    "paid_at": "2026-11-03T12:03:10+05:30",
    "callback_at": "2026-11-03T12:03:12+05:30",
    "test": false
  }
}

响应字段

data
字段类型说明
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
amountstring订单金额(创建时提交的金额)。
INR,字符串,最多两位小数,如 "1000.00"
paid_amountstring | null应上分金额:按应付金额付款时为订单金额,否则为实际到账金额;未付款时为 null。
INR,字符串,最多两位小数,如 "1000.00"
statusstring订单状态,见“状态说明”。
merchant_feestring本单实际收取的手续费;订单未成功时为 "0.00"。
INR,字符串,最多两位小数,如 "1000.00"
utrstring | null银行交易参考号;尚无确认的参考号时为 null。
created_atstring订单创建时间。
带时区的 ISO 8601 时间
paid_atstring | null确认付款成功的时间;未成功时为 null。
带时区的 ISO 8601 时间
callback_atstring | null最近一次回调送达成功的时间;尚未送达时为 null。
带时区的 ISO 8601 时间
testboolean是否为测试订单。用测试密钥创建的订单为 true,只走测试通道,不产生真实资金。

提交付款人 UTR

在你自己的付款页面收集到付款人的 UTR 后提交给平台,帮助更快确认到账。到账结果以查询或回调为准。

POST/api/v1/payins/submit-utr
Content-Type: application/jsonUTF-8权限 payins:create

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填创建订单时提交的商户订单号。
utrstring必填付款人银行转账的 UTR(交易参考号)。
12 位数字;测试订单使用平台生成的测试 UTR

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "ORDER-10001",
  "utr": "123456789012",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "submitted": true
  }
}

响应字段

data
字段类型说明
submittedbooleantrue 表示已保存。

查询 UTR

查询一个 UTR 的到账情况,以及它是否可以用于补单。订单信息只在该 UTR 属于本商户订单时返回。

POST/api/v1/payins/utr-lookup
Content-Type: application/jsonUTF-8权限 payins:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
utrstring必填付款人银行转账的 UTR(交易参考号)。
12 位数字;测试订单使用平台生成的测试 UTR

请求示例

{
  "merchant_id": "10001",
  "utr": "123456789012",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "utr": "123456789012",
    "utr_status": "RECEIVED",
    "utr_amount": "1000.00",
    "received": 1,
    "supplemented": 0,
    "merchant_order_id": "ORDER-10001",
    "platform_order_id": "PI2026110312000000012345678",
    "status": "SUCCESS",
    "amount": "1000.00"
  }
}

响应字段

data
字段类型说明
utrstring查询的 UTR。
utr_statusstringUTR 状态,见“状态说明”。
utr_amountstring | null该 UTR 确认的到账金额;无法确认时为 null。
INR,字符串,最多两位小数,如 "1000.00"
receivedinteger1 已确认到账;0 暂未确认。
supplementedinteger1 表示已通过补单完成到账。
merchant_order_idstring | null关联的商户订单号;不属于本商户时为 null。
platform_order_idstring | null关联的平台订单号;不属于本商户时为 null。
statusstring | null关联订单的状态;不属于本商户时为 null。
amountstring | null关联订单的金额;不属于本商户时为 null。
INR,字符串,最多两位小数,如 "1000.00"

申请补单

付款人已付款但订单未成功时,提交原商户订单号和 UTR 申请补单。平台核实到账后更新订单并发送回调。

POST/api/v1/payins/supplements
Content-Type: application/jsonUTF-8权限 payins:create

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填创建订单时提交的商户订单号。
utrstring必填付款人银行转账的 UTR(交易参考号)。
12 位数字;测试订单使用平台生成的测试 UTR

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "ORDER-10001",
  "utr": "123456789012",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "ORDER-10001",
    "platform_order_id": "PI2026110312000000012345678",
    "status": "PENDING",
    "utr": "123456789012",
    "actual_amount": null
  }
}

响应字段

data
字段类型说明
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
statusstring原订单当前状态:PENDING、SUCCESS、SUCCESS_UNDERPAID 或 SUCCESS_OVERPAID。
utrstring提交的 UTR。
actual_amountstring | null核实后的实际到账金额;尚未核实时为 null。
INR,字符串,最多两位小数,如 "1000.00"

查询补单结果

按商户订单号和 UTR 查询补单申请的结果。

POST/api/v1/payins/supplements/query
Content-Type: application/jsonUTF-8权限 payins:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填创建订单时提交的商户订单号。
utrstring必填付款人银行转账的 UTR(交易参考号)。
12 位数字;测试订单使用平台生成的测试 UTR

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "ORDER-10001",
  "utr": "123456789012",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "ORDER-10001",
    "platform_order_id": "PI2026110312000000012345678",
    "status": "SUCCESS",
    "utr": "123456789012",
    "actual_amount": "1000.00"
  }
}

响应字段

data
字段类型说明
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
statusstring原订单当前状态:PENDING、SUCCESS、SUCCESS_UNDERPAID 或 SUCCESS_OVERPAID。
utrstring提交的 UTR。
actual_amountstring | null核实后的实际到账金额;尚未核实时为 null。
INR,字符串,最多两位小数,如 "1000.00"

查询收款 UPI 列表

返回当前可能用于本商户代收的收款 UPI 地址,便于你识别付款人的转账去向。每笔订单实际使用的 UPI 以创建订单的返回为准。

POST/api/v1/upis
Content-Type: application/jsonUTF-8权限 payins:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制

请求示例

{
  "merchant_id": "10001",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "upis": [
      "merchant@bank",
      "shop@upi"
    ]
  }
}

响应字段

data
字段类型说明
upisarrayUPI 地址列表(字符串)。

查询单个 UPI

查询一个 UPI 地址是否为平台收款地址及其状态。

POST/api/v1/upis/lookup
Content-Type: application/jsonUTF-8权限 payins:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
upistring必填要查询的 UPI 地址,区分大小写。
最长 193 字符

请求示例

{
  "merchant_id": "10001",
  "upi": "merchant@bank",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "upi": "merchant@bank",
    "status": "ACTIVE",
    "exists": 1
  }
}

响应字段

data
字段类型说明
upistring查询的 UPI 地址。
statusstring | nullACTIVE 使用中;INACTIVE 已停用;FROZEN 已冻结;CONFLICT 归属待核实;未收录时为 null。
existsinteger1 已收录;0 未收录。

创建代付订单

向印度银行账户付款(INR)。创建时从可用余额中冻结订单金额和手续费;成功后扣除,失败后解冻。

POST/api/v1/payouts
Content-Type: application/jsonUTF-8权限 payouts:create

创建成功只表示订单已受理,付款结果以查询或回调为准。

请求超时或返回错误时,先用原商户订单号查询;确认不存在后再用相同参数重试。相同单号、相同内容的重复提交不会重复付款。

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填商户订单号,在本商户内唯一。
1–128 位,可用字母、数字和 _ : . - /
amountstring必填付款金额。单笔范围以平台为本商户开通的配置为准。
INR,字符串,最多两位小数,如 "1000.00"
bank_accountobject必填收款人银行账户。
bank_account.beneficiary_namestring必填收款人姓名。
1–100 字符;文字、数字、空格和 . ' & , / ( ) -,至少含一个字母
bank_account.account_numberstring必填银行账号。
6–34 位数字,不能全为 0
bank_account.ifscstring必填IFSC 代码。
11 位,如 HDFC0001234
bank_account.bank_namestring必填银行名称。
1–100 字符;文字、数字、空格和 . ' & , / ( ) -,至少含一个字母
bank_account.phonestring必填收款人手机号。
10 位印度手机号(6–9 开头),可加 +91
bank_account.emailstring必填收款人邮箱。
最长 200 字符
notify_urlstring必填接收本单结果通知的地址,见“回调通知”。
HTTPS,最长 2048 字符,域名需由平台开通
upistring可选收款人的 UPI 地址,作为补充信息;付款仍通过银行账户进行。
extraobject可选自定义数据,在回调中原样返回。
JSON 对象,最大 4096 字节,最多 5 层

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "PAYOUT-20001",
  "amount": "500.00",
  "bank_account": {
    "beneficiary_name": "Ravi Kumar",
    "account_number": "123456789012",
    "ifsc": "HDFC0001234",
    "bank_name": "HDFC Bank",
    "phone": "9876543210",
    "email": "[email protected]"
  },
  "notify_url": "https://merchant.example.com/payout/notify",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "PAYOUT-20001",
    "platform_order_id": "PO2026110312000000012345678",
    "amount": "500.00"
  }
}

响应字段

data
字段类型说明
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
amountstring订单金额(创建时提交的金额)。
INR,字符串,最多两位小数,如 "1000.00"

查询代付订单

按商户订单号查询一笔代付订单。

POST/api/v1/payouts/query
Content-Type: application/jsonUTF-8权限 payouts:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填创建订单时提交的商户订单号。

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "PAYOUT-20001",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "PAYOUT-20001",
    "platform_order_id": "PO2026110312000000012345678",
    "amount": "500.00",
    "status": "SUCCESS",
    "merchant_fee": "10.00",
    "utr": "123456789012",
    "test": false
  }
}

响应字段

data
字段类型说明
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
amountstring订单金额(创建时提交的金额)。
INR,字符串,最多两位小数,如 "1000.00"
statusstring订单状态,见“状态说明”。
merchant_feestring本单实际收取的手续费;订单未成功时为 "0.00"。
INR,字符串,最多两位小数,如 "1000.00"
utrstring | null银行交易参考号;尚无确认的参考号时为 null。
testboolean是否为测试订单。用测试密钥创建的订单为 true,只走测试通道,不产生真实资金。

查询代付订单列表

按条件分页查询本商户的代付订单。所有条件可选。

POST/api/v1/payouts/list
Content-Type: application/jsonUTF-8权限 payouts:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
pageinteger可选页码,默认 1。
page_sizeinteger可选每页条数,1–100,默认 50。
merchant_order_idstring可选商户订单号。
platform_order_idstring可选平台订单号。
created_fromstring可选创建时间起点(含)。
带时区的 ISO 8601 时间
created_tostring可选创建时间终点(不含)。
带时区的 ISO 8601 时间
statusstring可选订单状态。
min_amountstring可选最小订单金额(含)。
INR,字符串,最多两位小数,如 "1000.00"
max_amountstring可选最大订单金额(含)。
INR,字符串,最多两位小数,如 "1000.00"
sortstring可选排序:created_desc(默认)、created_asc、amount_desc、amount_asc。
payout_typestring可选付款方式:BANK_IN 银行账户。UPI 只出现在早期订单中。

请求示例

{
  "merchant_id": "10001",
  "status": "SUCCESS",
  "page": 1,
  "page_size": 50,
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
      {
        "merchant_order_id": "PAYOUT-20001",
        "platform_order_id": "PO2026110312000000012345678",
        "amount": "500.00",
        "status": "SUCCESS",
        "merchant_fee": "10.00",
        "utr": "123456789012"
      }
    ]
  }
}

响应字段

data
字段类型说明
countinteger符合条件的订单总数。
nextinteger | null下一页页码;没有时为 null。
previousinteger | null上一页页码;没有时为 null。
resultsarray订单列表,每项字段同“查询代付订单”。

获取代付回执

为已成功的代付生成网页回执链接,可发给收款人核对。回执包含收款人姓名、完整银行账号和 UTR,链接 24 小时内有效,请勿公开。

POST/api/v1/payouts/receipt
Content-Type: application/jsonUTF-8权限 payouts:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制
merchant_order_idstring必填创建订单时提交的商户订单号。

请求示例

{
  "merchant_id": "10001",
  "merchant_order_id": "PAYOUT-20001",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "merchant_order_id": "PAYOUT-20001",
    "platform_order_id": "PO2026110312000000012345678",
    "receipt_url": "https://pay.example.com/r/AbCdEf"
  }
}

响应字段

data
字段类型说明
merchant_order_idstring商户订单号。
platform_order_idstring平台订单号,PI 开头为代收,PO 开头为代付。联系平台处理订单时请提供此编号。
receipt_urlstring回执链接。

查询余额

返回本商户当前的可用余额和冻结金额(INR)。

POST/api/v1/balances
Content-Type: application/jsonUTF-8权限 balances:read

{ }请求参数

Body · application/json
字段类型必填说明
merchant_idstring必填商户编号,在商户后台“API 配置”中查看。
十进制数字字符串,如 "10001"
signstring必填请求签名,算法见“签名”。
64 位小写十六进制

请求示例

{
  "merchant_id": "10001",
  "sign": "<64 hex>"
}

↳响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "available_balance": "125000.00",
    "frozen_balance": "8000.00",
    "order_frozen_balance": "0.00"
  }
}

响应字段

data
字段类型说明
available_balancestring可用余额,可用于代付和结算。等于余额减去处理中的代付、结算和被冻结的代收订单;冻结金额超过余额时为负数(如 -380.00),这时不能代付或结算。
INR,字符串,最多两位小数,如 "1000.00"
frozen_balancestring冻结金额:处理中的代付、结算申请和被冻结的代收订单占用的金额,暂不可用。
INR,字符串,最多两位小数,如 "1000.00"
order_frozen_balancestring其中被冻结的代收订单金额。代收订单因付款人投诉等原因被上游冻结时计入,解冻后回到可用余额。
INR,字符串,最多两位小数,如 "1000.00"