请求方式:POST
请求头:Content-Type: application/json; charset=utf-8
先把参数按 ASCII 排序拼好,然后用 HashKey 采用 HMAC-SHA256算法 进行加密,最终得到的加密串作为sign
对生成的字符串 sign 执行 HMAC-SHA256 签名,以获得最终签名字符串
接口地址:https://api.sahanax.com/pay/collect
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| merchantNo | String | 是 | 商户号(由平台分配) |
| orderNo | String | 是 | 商户订单号(唯一) |
| amount | INTVAL | 是 | 代收金额(单位:INR) |
| notifyUrl | String | 是 | 支付结果回调地址 |
| clientIp | String | 是 | 用户请求IP地址 |
| sign | String | 是 | 接口签名 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | String | 返回码(2000 表示成功,其他为失败) |
| msg | String | 返回信息描述 |
| data | Object | 返回数据对象 |
| data.payUrl | String | 支付链接(用户跳转支付地址) |
| data.platOrderNo | String | 平台订单号 |
{
"merchantNo": "M123456789",
"orderNo": "MER20260108001",
"amount": 100.00,
"notifyUrl": "https://www.merchant.com/payin/notify",
"clientIp": "127.0.0.1",
"sign": "8e27b6558f93a7695a8f9e8c7d6b5a49"
}
{
"code": "2000",
"msg": "请求成功",
"data": {
"payUrl": "https://pay.example.com/pay?orderId=P20260108001",
"platOrderNo": "P20260108001"
}
}
{
"code": "1000",
"msg": "请求失败",
"data": null
}
接口地址:https://api.sahanax.com/pay/payout
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| merchantNo | String | 是 | 商户号(由平台分配) |
| orderNo | String | 是 | 商户代付订单号(唯一) |
| amount | INTVAL | 是 | 代付金额(单位:INR) |
| recipientName | String | 是 | 收款人姓名 |
| recipientEmail | String | 是 | 收款人邮箱 |
| recipientPhone | String | 是 | 收款人手机号(10位) |
| recipientAccount | String | 是 | 收款人银行卡/账户号 |
| bankIfsc | String | 是 | IFSC |
| notifyUrl | String | 是 | 代付结果回调地址 |
| sign | String | 是 | 接口签名 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | String | 返回码(2000表示受理成功,其他为失败) |
| msg | String | 返回信息描述 |
| data | Object | 返回数据对象 |
| data.platOrderNo | String | 平台代付订单号 |
| data.handleTime | String | 订单受理时间(格式:yyyy-MM-dd HH:mm:ss) |
{
"merchantNo": "M123456789",
"orderNo": "PAYOUT20260108001",
"amount": 100.00,
"recipientName": "张三",
"recipientAccount": "6222081234567890",
"recipientEmail": "TEST@GMAIL.COM",
"recipientPhone": "958485458",
"bankIfsc": "IFSC55454545454",
"notifyUrl": "https://www.merchant.com/payNotify",
"sign": "7b6a5e4d3c2b1a098f7e6d5c4b3a2s1d"
}
{
"code": "2000",
"msg": "代付订单受理成功",
"data": {
"platOrderNo": "PF20260108001",
"handleTime": "2026-01-08 10:30:00"
}
}
{
"code": "1000",
"msg": "余额不足",
"data": null
}
接口地址:https://api.sahanax.com/pay/collect/query
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| merchantNo | String | 是 | 商户号(由平台分配) |
| orderNo | String | 是 | 商户代收订单号 |
| sign | String | 是 | 接口签名 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | String | 返回码(2000表示查询成功) |
| msg | String | 返回信息描述 |
| data | Object | 订单信息对象 |
| data.orderNo | String | 商户订单号 |
| data.platOrderNo | String | 平台订单号 |
| data.amount | Decimal | 支付金额 |
| data.status | String | 代收状态(1:未支付,2:支付成功,3:支付失败) |
| data.payTime | String | 支付完成时间(格式:yyyy-MM-dd HH:mm:ss,未支付则为空) |
{
"merchantNo": "M123456789",
"orderNo": "MER20260108001",
"sign": "6a5b4c3d2e1f0g9h8j7k6l5m4n3b2v1c"
}
{
"code": "2000",
"msg": "查询成功",
"data": {
"orderNo": "MER20260108001",
"platOrderNo": "P20260108001",
"amount": 100.00,
"status": "2",
"payTime": "2026-01-08 10:45:30"
}
}
接口地址:https://api.sahanax.com/pay/payout/query
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| merchantNo | String | 是 | 商户号(由平台分配) |
| orderNo | String | 是 | 商户代付订单号 |
| sign | String | 是 | 接口签名 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | String | 返回码(2000表示查询成功) |
| msg | String | 返回信息描述 |
| data | Object | 订单信息对象 |
| data.orderNo | String | 商户订单号 |
| data.platOrderNo | String | 平台订单号 |
| data.amount | Decimal | 代付金额 |
| data.status | String | 代付状态(0:处理中,1:代付成功,2:代付失败,3:已驳回) |
| data.completeTime | String | 代付完成时间(格式:yyyy-MM-dd HH:mm:ss,未完成则为空) |
| data.failureReason | String | 失败原因 |
{
"merchantNo": "M123456789",
"orderNo": "PAY20260108001",
"sign": "4b3a2s1d0f9g8h7j6k5l4m3n2b1v0c9x"
}
{
"code": "2000",
"msg": "查询成功",
"data": {
"orderNo": "PAY20260108001",
"platOrderNo": "PF20260108001",
"amount": 500.00,
"status": "1",
"completeTime": "2026-01-08 11:20:15",
"failureReason": ""
}
}
{
"code": "1000",
"msg": "订单未查询到",
"data": null
}
接口地址:https://api.sahanax.com/pay/balance/query
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| merchantNo | String | 是 | 商户号(由平台分配) |
| timestamp | Long | 是 | 时间戳 |
| sign | String | 是 | 接口签名 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | String | 返回码(2000表示查询成功) |
| msg | String | 返回信息描述 |
| data | Object | 余额信息对象 |
| data.merchantNo | String | 商户号 |
| data.availableBalance | Decimal | 可用余额(单位:INR) |
| data.queryTime | String | 查询时间(格式:yyyy-MM-dd HH:mm:ss) |
{
"merchantNo": "M123456789",
"timestamp": 1736329200,
"sign": "2a1s0d9f8g7h6j5k4l3m2n1b0v9c8x7s6d"
}
{
"code": "2000",
"msg": "余额查询成功",
"data": {
"merchantNo": "M123456789",
"availableBalance": 12500.50,
"queryTime": "2026-01-08 14:30:00"
}
}
POST 你得回调地址
收到成功回调处理完成后,请返回 success
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| merchantNo | String | 是 | 商户号(由平台分配) |
| orderNo | String | 是 | 商户代付订单号 |
| platOrderNo | String | 是 | 平台单号 |
| amount | intval | 是 | 支付金额 |
| status | String | 是 | 代付状态(0:处理中,1:代付成功,2:代付失败,3:已驳回)
代收状态(1:未支付,2:支付成功,3:支付失败) |
| utr | String | 是 | UTR |
| failureReason | String | 是 | 失败原因 |
| sign | String | 是 | 接口签名 |
{
"merchantNo": "M123456789",
"orderNo": "PAY20260108001",
"platOrderNo": "PF20260108001",
"amount": 500,
"status": "1",
"utr": "",
"failureReason": "",
"sign": "4b3a2s1d0f9g8h7j6k5l4m3n2b1v0c9x"
}