创建代收订单
EndPoint
POST baseUrl + /api/payIn
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例值 |
|---|---|---|---|---|
currency | Y | string(32) | 货币代码(COP) | COP |
payType | Y | int | 支付产品类型 | 请参考代收paytype枚举 |
amount | Y | decimal(20,0) | 金额10000-5000000(不允许小数位) | 10000 |
mchOrderNo | Y | string(32) | 商户订单号(不允许重复) | mchOrderNo1234 |
notifyUrl | Y | string(250) | 回调地址 | https://merchant.com/webhooks |
nonceStr | Y | string(32) | 随机字符串 | 1863484722378907648 |
realName | Y | string(32) | 用户姓名不能有特殊字符、限制最长64个字符 | Jeck |
phone | Y | string(32) | 手机号格式要正确,尽量传真实的手机号 | +57xxxxxxx |
email | Y | string(64) | 邮箱 邮箱格式要正确,尽量传真实的邮箱 | example@gmail.com |
idType | Y | string(32) | 付款人证件类型 | 请参考代收付款人证件类型 |
idCard | Y | string(32) | 付款人证件号 | 我们不校验真实性和合法性,错误的证件号可能导致部分交易失败 |
reusableStatus | N | boolean | 是否允许重复支付 只能 false | 不传默认 false(false=不允许 true=允许) |
expireTime | N | long | 过期时间(单位:秒)不传默认24小时,部分通道支持 | 3600 |
remark | N | string(32) | 备注 (请使用英文字符或不带重音的西语) | 不传默认 remark |
userType | N | String(16) | 用户类型 payType=157(PSE)必传 | 请参考用户类型 |
bankId | N | int | 银行IdpayType=157(PSE)必传 | 请参考代收银行列表查询 |
请求示例
curl -L 'baseUrl/api/payIn' \
-H 'MerchantId: 1002001' \
-H 'Sign: A6FC73F7D22EC8B4A064C8FFCC592CBF' \
-H 'Content-Type: application/json' \
-d '{"amount":30000,"idType":"1","mchOrderNo":"order00000001","idCard":"1103412345","remark":"payin","nonceStr":"123456789","realName":"Julian","reusableStatus":false,"payType":154,"expireTime":3600,"phone":"573016612345","notifyUrl":"https://xxxx.com/testCallback","currency":"COP","userType":"1","email":"julianandresgonzalezpineda@gmail.com"}'2
3
4
5
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
merchantId | long | 商户Id |
mchOrderNo | string(32) | 商户订单号 |
orderNo | string(32) | 平台订单号 |
amount | decimal(20,2) | 金额 |
orderFee | decimal(20,2) | 手续费 |
payCode | string(32) | 付款账户 VA |
payUrl | string(250) | 收银台支付地址 |
响应示例
{
"msg": "SUCCESS",
"code": 200,
"data": {
"merchantId": "1002001",
"mchOrderNo": "order00000001",
"orderNo": "PAYIN00000000000000000001",
"payCode": "350-Rivotech-29231858-PAYIN00000000000000000001",
"payUrl": "350-Rivotech-29231858-PAYIN00000000000000000001",
"payDeskUrl": "https://testxxxxx.cashypro.com/index.html?PAYIN00000000000000000001",
"amount": "30000",
"orderFee": "800"
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
{
"msg": "Payin_Order_Error",
"code": 500
}2
3
4
TIP
PSE
请使用payUrl参数,此字段值为 Pse的在线支付地址
NEQUI_PUSH
请使用payUrl参数,此字段值为 Nequi的在线支付地址
Efecty
请使用payCode字段,此字段值为Efecty的付款信息
返回参数格式1:convinco number,112766|reference number,2701741217807510
返回参数格式2:Convenio,113252|Referencia,11309798721
参数格式1解析方式:以|分割字符串 convinco number,112766|reference number,2701741217807510 分割后得到两个键值对 convinco number,112766 reference number,2701741217807510 再以,分割键值对 convinco number 值为 112766,reference number 值为 2701741217807510
返回参数格式2同理
返回参数格式3:payCode: "https://www.xxxx" 返回的是一个网址直接做跳转处理即可
查询代收订单
API EndPoint
POST baseUrl + /api/payInQuery
请求参数
| 参数名 | 必选 | 类型 | 示例值 | 字段说明 |
|---|---|---|---|---|
mchOrderNo | N | string(32) | 1386556575370063873 | 商户订单号 |
orderNo | N | string(32) | PAYIN8551843837024997376 | 平台订单号 |
nonceStr | Y | string(32) | 9459931608 | 随机字符串 |
TIP
我们建议优先使用orderNo(平台订单号),平台订单号和商户订单号至少需要传递一个。
请求示例
curl -L 'baseUrl/api/payInQuery' \
-H 'MerchantId: 1002001' \
-H 'Sign: A6FC73F7D22EC8B4A064C8FFCC592CBF' \
-H 'Content-Type: application/json' \
-d '{"mchOrderNo":"1386556575370063873","nonceStr":"9459931608","orderNo":"PAYIN8551843837024997376"}'2
3
4
5
响应参数
| 参数名 | 类型 | 字段说明 |
|---|---|---|
merchantId | int | 商户Id |
mchOrderNo | string(32) | 商户订单号 |
orderNo | string(32) | 平台订单号 |
channelOrderNo | string(32) | 渠道订单号 |
payType | string(32) | 代收PayType枚举 |
payCode | string(32) | 支付码 |
payUrl | string(250) | 付款二维码 |
amount | decimal(20,0) | 金额 |
fee | decimal(20,4) | 手续费 |
orderStatus | string(32) | 代收订单状态枚举 |
completionTime | date | 完成时间 |
响应示例
{
"msg": "SUCCESS",
"code": 200,
"data": {
"merchantId": "1002001",
"mchOrderNo": "1386556575370063873",
"orderNo": "PAYIN8551843837024997376",
"payType": "43",
"payCode": "",
"payUrl": "https://m.dana.id/link/pay?bizNo=202412021112128001101660361270",
"payDeskUrl": "https://idpaydesk2.brcashypro.com/views/pay.html?PAYIN8551843837024997376",
"amount": "20000",
"fee": "1700",
"orderStatus": "PAYING",
"completionTime": null,
"nonceStr": null
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"msg": "SUCCESS",
"code": 200,
"data": {
"merchantId": "1002001",
"mchOrderNo": "1386556575370063873",
"orderNo": "PAYIN8551843837024997376",
"payType": "43",
"payCode": "",
"payUrl": "https://m.dana.id/link/pay?bizNo=202412021112128001101660361270",
"payDeskUrl": "https://idpaydesk2.brcashypro.com/views/pay.html?PAYIN8551843837024997376",
"amount": "20000",
"fee": "1700",
"orderStatus": "SUCCESS",
"completionTime": "2024-12-02 15:40:50",
"nonceStr": null
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
代收订单结果通知
异步通知请求
通知地址由商户提供
POST Merchant NotifyUrl
异步通知请求参数
| 参数名 | 类型 | 说明 |
|---|---|---|
merchantId | int | 商户Id |
mchOrderNo | string(32) | 商户订单号 |
orderNo | string(32) | 平台订单号 |
amount | decimal(20,2) | 金额 |
fee | decimal(20,4) | 手续费 |
payUrl | string(32) | 收银台Url |
payDeskUrl | string(250) | 收银台地址 |
payType | string(32) | 代收PayType枚举 |
orderStatus | string(32) | 代收订单状态枚举 |
completionTime | date | 完成时间 |
nonceStr | string(32) | 随机字符串 |
patchOrderNo | string(32) | 关联的原订单的平台订单号 |
patchMchOrderNo | string(32) | 关联的原订单的商户订单号 |
orderType | string(32) | API=API接口 MCH=商户后台 DESK=收银台 PATCH=补单 |
异步通知请求示例
curl -L 'merchant.com/webhooks/payin' \
-H 'MerchantId: 1002001' \
-H 'Sign: A6FC73F7D22EC8B4A064C8FFCC592CBF' \
-H 'Content-Type: application/json' \
-d '{"amount":20000.00,"completionTime":"2024-12-02 12:07:06","fee":2500.0000,"mchOrderNo":"1386503284355244033","merchantId":"3002120","nonceStr":"1733116026894","orderNo":"PAYIN8551790545658687488","orderStatus":"SUCCESS","payCode":"OR.GPNQR..INOPROID_BS","payType":"41","payUrl":"https://payurl.com"}'2
3
4
5
{
"amount": 1000.0,
"completionTime": "2024-11-24 21:56:55",
"fee": 2.0,
"mchOrderNo": "order_xxxxxxxxxxxxxx",
"merchantId": "1012345",
"nonceStr": "1732507016285",
"orderNo": "PAYIN1234500000000001",
"orderStatus": "SUCCESS",
"orderType": "API",
"patchMchOrderNo": "order_xxxxxxxxxxxxxx",
"patchOrderNo": "PAYIN1234500000000001",
"payCode": "60088888888888",
"payType": "69",
"payUrl": "https://xxxxx.xxxx.com/xxx/xx/xxx"
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"amount": 1000.0,
"completionTime": "2024-11-24 21:56:55",
"fee": 2.0,
"mchOrderNo": "order_xxxxxxxxxxxxxx",
"merchantId": "2004015",
"nonceStr": "1732507016285",
"orderNo": "PAYIN1234500000000002",
"orderStatus": "SUCCESS",
"orderType": "PATCH",
"patchMchOrderNo": "order_xxxxxxxxxxxxxx0001",
"patchOrderNo": "PAYIN1234500000000001",
"payCode": "60088888888888",
"payType": "69"
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
TIP
fee 和 completionTime 仅在订单成功支付时有值。completionTime的格式为 yyyy-MM-dd HH:mm:ss。
关于orderType为PATCH时的补充说明
用户不按照订单金额付款或者重复付款会出现补单订单,此时补单订单的orderType为PATCH:
orderNo是针对这笔订单新生成的平台订单号。patchOrderNo为关联的原订单的平台订单号,patchMchOrderNo为关联的原订单的商户订单号。mchOrderNo为关联的原订单的商户订单号(带序列号标识)。注意,此时回调返回的mchOrderNo末尾会增加序列号标识,用于区分多笔部分还款的订单。
例如您的商户订单号是MCH20230088,当产生第一笔部分支付时,我们会在原订单的商户订单号mchOrderNo末尾增加序列号00001 ,您收到的回调的mchOrderNo就是MCH2023008800001,以此类推。
当发生补单行为时,我们的机器人也会在对应的商户群进行通知,通知会包含所有您需要的信息。
订单的orderType为API时:
patchOrderNo和orderNo相同patchMchOrderNo和mchOrderNo相同
此时上述参数没有额外的意义。
TIP
Http响应状态码为200、301或302表示已正常发送回调,其它状态码我们会认为回调失败。回调失败后会在1,3,7,11,16,22,29,37,46,56分钟 重试,一共重试回调10次。