商户代收代付接口文档
版本:v1.0
适用对象:商户系统对接代收、代付、订单查询、余额查询、异步通知。
1. 接入说明
1.1 请求地址
pay-1 当前接口域名:
https://aspay-api.sdrgs.eu.cc
接口均使用 POST 请求,参数以 application/x-www-form-urlencoded 或 multipart/form-data 提交。
1.2 商户参数
| 参数 | 说明 |
|---|---|
mer_id | 平台分配的商户 ID |
mc_key | 平台分配的商户签名密钥,仅用于本地签名,不能在请求中传输 |
1.3 签名规则
所有商户接口均使用 MD5 签名。
签名步骤:
- 取所有参与签名的请求参数,排除
sign。 - 排除值为空的字段,例如
""、null、None。 - 按参数名 ASCII 升序排序。
- 拼接为
key=value&key=value。 - 末尾追加
&key={mc_key}。 - 对最终字符串做 MD5,并转为大写 32 位字符串。
示例:
amount=100.00&callback=https://merchant.example.com/return&gateway=1001&mer_id=10001¬ify=https://merchant.example.com/notify&order_id=M202607020001&key=YOUR_MC_KEY
签名结果:
sign = MD5(上面字符串).upper()
Python 示例:
import hashlib
def make_sign(params: dict, mc_key: str) -> str:
items = []
for key in sorted(params.keys()):
if key == "sign":
continue
value = params[key]
if value is None or value == "":
continue
items.append(f"{key}={value}")
sign_str = "&".join(items) + f"&key={mc_key.strip()}"
return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
1.4 通用响应格式
成功或失败均返回 JSON。
{
"code": 0,
"data": null,
"message": ""
}
code = 0 表示请求受理成功。业务最终结果以订单查询或异步通知为准。
2. 代收下单
2.1 接口
POST https://aspay-api.sdrgs.eu.cc/pay
2.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
mer_id | 是 | 商户 ID |
gateway | 是 | 代收通道编码,由平台分配 |
amount | 是 | 订单金额,最多保留 2 位小数 |
callback | 是 | 支付完成后的同步跳转地址 |
notify | 是 | 代收结果异步通知地址 |
order_id | 是 | 商户订单号,同一商户不可重复 |
sign | 是 | MD5 签名 |
remark | 否 | 商户备注;不参与签名 |
notice_api | 否 | 预留字段 |
realname | 否 | 付款人姓名;不参与签名 |
player_ip | 否 | 商户侧用户 IP;不参与签名 |
user_id | 否 | 商户侧用户 ID;不参与签名 |
注意:remark、realname、player_ip、user_id 不参与代收下单签名。
2.3 请求示例
curl -X POST "https://aspay-api.sdrgs.eu.cc/pay" \
-d "mer_id=10001" \
-d "gateway=1001" \
-d "amount=100.00" \
-d "callback=https://merchant.example.com/return" \
-d "notify=https://merchant.example.com/notify/ds" \
-d "order_id=M202607020001" \
-d "sign=SIGN_VALUE"
2.4 成功响应
{
"code": 0,
"data": "https://pay.example.com/order/xxxxx",
"message": "下单成功",
"upi": "example@upi",
"amount": "100.00",
"token": "xxxxx",
"order_code": "S20260702000001"
}
字段说明:
| 字段 | 说明 |
|---|---|
data | 支付链接,商户可跳转用户到该地址 |
upi | 收款 UPI,可能为空 |
amount | 用户实际应支付金额 |
token | 支付页 token |
order_code | 平台代收订单号 |
original_amount | 当通道启用浮动金额时返回,表示原始金额 |
decimal_callback_enabled | 当通道启用浮动金额时返回 true |
3. 代付下单
3.1 接口
POST https://aspay-api.sdrgs.eu.cc/pay/df
3.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
mer_id | 是 | 商户 ID |
order_id | 是 | 商户代付订单号,同一商户不可重复 |
gateway | 是 | 代付通道编码 |
amount | 是 | 代付金额,必须为整数或小数部分全为 0 |
account | 是 | 收款账号 |
user | 是 | 收款人姓名 |
bank_code | 是 | IFSC |
bank | 是 | 银行名称 |
notify | 是 | 代付结果异步通知地址;如无需外部通知需与平台确认是否可填 sys |
notice_api | 否 | 预留字段 |
sign | 是 | MD5 签名 |
注意:
- 代付接口会校验商户代付 IP 白名单。
amount不允许非 0 小数,例如100.50会失败。- 商户余额需大于等于
amount + 手续费。
3.3 请求示例
curl -X POST "https://aspay-api.sdrgs.eu.cc/pay/df" \
-d "mer_id=10001" \
-d "order_id=DF202607020001" \
-d "gateway=2001" \
-d "amount=1000" \
-d "account=1234567890" \
-d "user=RAHUL SHARMA" \
-d "bank_code=HDFC0000001" \
-d "bank=HDFC BANK" \
-d "notify=https://merchant.example.com/notify/df" \
-d "sign=SIGN_VALUE"
3.4 成功响应
{
"code": 0,
"massage": "下单成功",
"order_code": "F20260702000001",
"amount": "1000"
}
说明:字段名实际返回为 massage,不是 message。
4. 代收订单查询
4.1 接口
POST https://aspay-api.sdrgs.eu.cc/status/ds
4.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
mer_id | 是 | 商户 ID |
order_id | 是 | 商户代收订单号 |
sign | 是 | MD5 签名 |
4.3 成功响应
{
"code": 0,
"message": "",
"data": {
"order_id": "M202607020001",
"order_code": "S20260702000001",
"amount": "100.00",
"realpay": "98.00",
"utr": "123456789012",
"upi": "example@upi",
"time_create": "2026-07-02 12:00:00",
"time_finish": "2026-07-02 12:03:00",
"status": 0
}
}
商户侧状态:
status | 说明 |
|---|---|
0 | 成功 |
1 | 处理中 |
2 | 失败或已关闭 |
5. 代付订单查询
5.1 接口
POST https://aspay-api.sdrgs.eu.cc/status/df
5.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
mer_id | 是 | 商户 ID |
order_id | 是 | 商户代付订单号 |
sign | 是 | MD5 签名 |
5.3 成功响应
{
"code": 0,
"message": "",
"data": {
"order_id": "DF202607020001",
"order_code": "F20260702000001",
"amount": "1000.00",
"realpay": "1010.00",
"utr": "123456789012",
"time_create": "2026-07-02 12:00:00",
"time_finish": "2026-07-02 12:05:00",
"status": 0,
"user": "RAHUL SHARMA",
"account": "1234567890",
"bank": "HDFC BANK"
}
}
商户侧状态:
status | 说明 |
|---|---|
0 | 成功 |
1 | 处理中 |
2 | 失败或已驳回 |
6. 余额查询
6.1 接口
POST https://aspay-api.sdrgs.eu.cc/balance
6.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
mer_id | 是 | 商户 ID |
sign | 是 | MD5 签名 |
6.3 成功响应
{
"code": 0,
"message": "",
"data": {
"available": "10000.00",
"frozen": "500.00",
"balance": "10500.00"
}
}
字段说明:
| 字段 | 说明 |
|---|---|
available | 可用余额 |
frozen | 冻结余额 |
balance | 总余额,可用余额 + 冻结余额 |
7. 代收 UTR 补单
该接口用于商户主动提交代收订单的 UTR。提交成功并匹配到账单后,平台会完成代收订单并触发代收异步通知。
7.1 接口
POST https://aspay-api.sdrgs.eu.cc/pay/ds/utr
7.2 请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
mer_id | 是 | 商户 ID |
order_id | 是 | 商户代收订单号 |
utr | 是 | UTR/RRN,长度需不少于 12 位 |
sign | 是 | MD5 签名 |
签名字段包含 mer_id、order_id、utr,按通用签名规则生成。
7.3 请求示例
curl -X POST "https://aspay-api.sdrgs.eu.cc/pay/ds/utr" \
-d "mer_id=10001" \
-d "order_id=M202607020001" \
-d "utr=123456789012" \
-d "sign=SIGN_VALUE"
7.4 响应说明
| code | message | 说明 |
|---|---|---|
0 | success | UTR 补单成功,订单会触发代收通知 |
10003 | UTR already existed | 订单已存在 UTR |
10005 | UTR refill failed. | UTR 已记录但未完成补单,通常是未匹配到账单或资金处理失败 |
10009 | sign error | 签名错误 |
10012 | UTR submitted too frequently or already processing. | 同一 UTR 提交过快或正在处理中 |
8. 异步通知
平台会向商户传入的 notify 地址发起 POST 表单通知。
商户收到通知后,必须直接响应小写:
ok
若未返回 ok,平台会在订单更新时间后的约 5 分钟内重试通知。
8.1 代收成功通知
POST 商户代收 notify 地址
通知参数:
| 参数 | 说明 |
|---|---|
mer_id | 商户 ID |
order_id | 商户代收订单号 |
status | 固定为 ok |
amount | 订单金额;部分通道启用浮动金额时回调原始金额 |
realpay | 商户实际结算金额 |
remark | 下单备注,存在时返回 |
utr | UTR;仅对配置了 UTR 回传的商户返回 |
sign | 平台签名 |
代收通知签名字段默认包含:
amount, mer_id, order_id, realpay, status
remark 和 utr 在当前通知实现中追加于签名之后,不参与默认签名。
8.2 代付结果通知
POST 商户代付 notify 地址
通知参数:
| 参数 | 说明 |
|---|---|
mer_id | 商户 ID |
order_id | 商户代付订单号 |
status | ok 表示成功,error 表示失败 |
amount | 代付金额 |
realpay | 商户扣款金额,通常为代付金额 + 手续费 |
reason | ok 或 error |
utr | UTR;仅对配置了 UTR 回传或二次回调白名单的商户返回 |
sign | 平台签名 |
代付通知签名字段默认包含:
amount, mer_id, order_id, realpay, reason, status
utr 在当前通知实现中追加于签名之后,不参与默认签名。
8.3 通知验签示例
商户收到通知后,按同样的 MD5 规则验签。
示例:
notify_params = {
"mer_id": "10001",
"order_id": "M202607020001",
"status": "ok",
"amount": "100.00",
"realpay": "98.00",
"sign": "SIGN_FROM_PLATFORM",
}
assert make_sign(notify_params, "YOUR_MC_KEY") == notify_params["sign"]
9. 错误码
| code | message | 说明 |
|---|---|---|
0 | - | 成功 |
10000 | Illegal IP | IP 不允许,常见于代付白名单校验失败 |
10001 | Data format error | 请求格式错误 |
10002 | Parameter exception | 参数错误或存在非法字段 |
10003 | Parameter cannot be empty | 必填参数为空 |
10004 | Merchant does not exist | 商户不存在 |
10005 | Merchant status exception | 商户状态异常 |
10006 | Signature error | 签名错误 |
10008 | Channel is busy | 通道繁忙或无可用收款账号 |
10009 | Gateway error | 通道不存在 |
10010 | Channel maintenance | 通道维护 |
10011 | Amount error | 金额错误或不在允许范围 |
10012 | Channel not activated | 商户未开通该通道 |
10013 | Rate error | 费率配置错误 |
10014 | Order failed | 下单失败或订单重复 |
10015 | Insufficient payout balance | 代付余额不足 |
10016 | Order does not exist | 订单不存在 |
10017 | IFSC error | IFSC 错误 |
10022 | Payout setting exception | 系统代付设置异常 |
10023 | Merchant payout setting exception | 商户代付设置异常 |
10024 | Amount decimal is not zero | 代付金额小数部分必须为 0 |
10026 | Reconciliation locked, please try again later | 对账锁定中 |
10027 | Blacklist IP banned for collection | 代收 IP 黑名单 |
10028 | Blacklist user_id banned for collection | 代收用户 ID 黑名单 |
10029 | IFSC is not allow temporarily | IFSC 或账号暂不允许 |
10. 对接建议
- 商户订单号
order_id必须全局唯一,避免重复下单。 - 下单成功只代表平台已受理,最终状态以异步通知或查询接口为准。
- 商户通知接口需保证幂等,同一订单可能收到多次通知。
- 商户通知接口成功处理后必须返回纯文本
ok,不要返回 JSON。 - 金额字段建议按字符串处理,避免浮点精度问题。
- 商户应保存平台订单号
order_code,方便排查和人工对账。