API 接口文档
一、接口说明
基础URL: https://apix.angeloux.com
请求方式: POST
Content-Type: application/json
字符编码: UTF-8
二、签名规则
签名算法
所有接口请求都需要进行签名验证,签名算法如下:
- 将所有请求参数(除sign外)按照参数名ASCII码从小到大排序(字典序)
- 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串
- 在拼接的字符串末尾追加商户API密钥(&key=secret)
- 对拼接后的字符串进行MD5加密,得到32位小写字符串即为签名(sign)
签名示例
请求参数:
merchantNo=101
merchantOrderNo=order202512121
amount=100
notifyUrl=https://yyyy.com/notify
API密钥:1234567890
步骤1-2:拼接参数(按字典序)
amount=100&merchantNo=101&merchantOrderNo=order202512121¬ifyUrl=https://yyyy.com/notify
步骤3:追加密钥
amount=100&merchantNo=101&merchantOrderNo=order202512121¬ifyUrl=https://yyyy.com/notify&key=1234567890
步骤4:MD5加密
sign = md5(拼接字符串);
三、接口列表
POST
1. 创建代付订单
/api/create/payment
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| merchantNo |
Integer |
是 |
商户号 |
| merchantOrderNo |
String |
是 |
商户订单号(商户系统唯一) |
| payName |
String |
是 |
收款人姓名 |
| payAccount |
String |
是 |
收款账号 |
| payIfsc |
String |
是 |
收款IFSC代码 |
| email |
String |
是 |
收款人邮箱 |
| payPhone |
String |
是 |
收款人手机号(最多10位数字) |
| amount |
String |
是 |
订单金额(单位:INR,最多2位小数) |
| notifyUrl |
String |
是 |
订单状态回调地址 |
| sign |
String |
是 |
签名(见签名规则) |
请求示例
{
"merchantNo": 101,
"merchantOrderNo": "order202512121",
"payPhone": "84545954854",
"payName": "John",
"payAccount": "1234567890",
"payIfsc": "HDFC0001234",
"email":"xxxxxx@gmail.com",
"amount": "100",
"notifyUrl": "https://yyyy.com/notify",
"sign": "adjsiojdadjiasdasdasdasd"
}
响应参数
| 参数名 |
类型 |
说明 |
| code |
Integer |
响应码(200表示提交成功,其他代表提交失败) |
| message |
String |
响应消息 |
| data |
Object |
响应数据(code=200 时候才会有值) |
| data.platformNo |
String |
平台订单号(系统生成的唯一订单号) |
| data.merchantOrderNo |
String |
商户订单号 |
注意:响应码 200 只是代表提交到系统成功,具体订单成功请以回调和查询接口为准!!!
响应示例
{
"code": 200,
"message": "success",
"data": {
"platformNo": "1234567890123456789",
"merchantOrderNo": "123456"
}
}
POST
2. 创建代收订单
/api/create/collection
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| merchantNo |
Integer |
是 |
商户号 |
| merchantOrderNo |
String |
是 |
商户订单号(商户系统唯一) |
| amount |
String |
是 |
订单金额(单位:INR,最多2位小数) |
| email |
String |
是 |
邮箱 |
| phone |
String |
是 |
手机号(最多10位数字) |
| notifyUrl |
String |
是 |
订单状态回调地址 |
| sign |
String |
是 |
签名(见签名规则) |
请求示例
{
"merchantNo": 101,
"merchantOrderNo": "collect1314520",
"email": "xxxxx@gmail.com",
"phone": "854585495",
"amount": "500",
"notifyUrl": "https://yyyyyy.com/notify/collect",
"sign": "sadsadasdasdasdasd"
}
响应参数
| 参数名 |
类型 |
说明 |
| code |
Integer |
响应码(200表示提单成功,有正确的付款链接,其他状态无) |
| message |
String |
响应消息 |
| data |
Object |
响应数据(code=200 时候才会有值) |
| data.platformNo |
String |
平台订单号 |
| data.merchantOrderNo |
String |
商户订单号 |
| data.payUrl |
String |
支付跳转地址(用户支付时跳转此地址) |
响应示例
{
"code": 200,
"message": "success",
"data": {
"platformNo": "123456789",
"merchantOrderNo": "123456789",
"payUrl": "https://domain.com/order=123456"
}
}
POST
3. 订单查询
/api/create/query
根据商户订单号查询订单状态(支持代收和代付订单)
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| merchantNo |
Integer |
是 |
商户号 |
| merchantOrderNo |
String |
是 |
商户订单号 |
| type |
String |
是 |
查询类型(PAYMENT-代付, COLLECTION-代收) |
| sign |
String |
是 |
签名(见签名规则) |
请求示例
{
"merchantNo": 101,
"merchantOrderNo": "12121212",
"type": "PAYMENT",
"sign": "dasdasdasdasdasdas"
}
响应参数
| 参数名 |
类型 |
说明 |
| code |
Integer |
响应码(200表示成功,其他代表查询失败) |
| message |
String |
响应消息 |
| data |
Object |
响应数据(code=200 时候才会有值) |
| data.platformNo |
String |
平台订单号 |
| data.merchantOrderNo |
String |
商户订单号 |
| data.status |
String |
订单状态:PROCESS-处理中, COMPLETED-已完成, FAILURE-失败, REJECT-已撤回 |
| data.amount |
String |
订单金额 |
| data.pay_amount |
String |
代收支付金额 |
| data.createTime |
String |
创建时间(格式:yyyy-MM-dd HH:mm:ss) |
| data.utr |
String |
UTR(订单完成时返回有值) |
响应示例
{
"code": 200,
"message": "success",
"data": {
"platformNo": "131313131313",
"merchantOrderNo": "12121212121212",
"status": "COMPLETED",
"amount": "100",
"pay_amount": "100",
"createTime": "2024-01-01 10:00:00",
"utr": null
}
}
四、回调通知
回调说明
注意:当订单状态发生变化时(订单完成,订单失败,订单撤销),系统会向商户配置的 notifyUrl 发送POST请求通知。
回调参数
| 参数名 |
类型 |
说明 |
| merchantNo |
Integer |
商户号 |
| merchantOrderNo |
String |
商户订单号 |
| platformNo |
String |
平台订单号 |
| status |
String |
订单状态:COMPLETED-已完成 |
| amount |
String |
订单金额 |
| pay_amount |
String |
代收支付金额 |
| type |
String |
订单类型:PAYMENT-代付, COLLECTION-代收 |
| utr |
String |
UTR(订单完成时返回有值) |
| sign |
String |
签名 |
回调示例
POST https://yyyyyy.com/notify
Content-Type: application/json
{
"merchantNo": 101,
"merchantOrderNo": "121212121212",
"platformNo": "1131313131313",
"pay_amount": "1000",
"status": "COMPLETED",
"amount": "1000",
"type": "PAYMENT",
"utr": "",
"sign": "111111111111111111111"
}
重要提示:
- 商户收到回调后,请返回HTTP 200状态码表示接收成功
- 如果商户未返回200,系统会重试通知(最多3次)
- 建议商户根据商户订单号做幂等处理,避免重复处理
五、错误码说明
| 错误码 |
说明 |
| 200 |
请求成功 |
| 400 |
参数错误(缺少必要字段、字段格式错误等) |
| 401 |
签名验证失败 |
| 403 |
商户IP不在白名单 |
| 405 |
商户余额不足 |
| 500 |
服务器内部错误 |
错误响应示例
{
"code": 401,
"message": "Signature verification failed",
"data": null
}
六、注意事项
- 所有金额字段使用
string 类型,最多保留2位小数
- 所有时间字段格式为:
yyyy-MM-dd HH:mm:ss
- 商户订单号(merchantOrderNo)在商户系统内必须唯一
- 订单查询接口支持代收和代付两种类型
- 建议商户实现订单查询接口,定期查询订单状态作为回调的补充