创建代收订单
API EndPoint
POST baseUrl
+ /api/payIn
请求参数
参数名 | 必选 | 类型 | 字段说明 | 示例值 |
---|---|---|---|---|
currency | Y | string(32) | 货币代码 | MXN |
payType | Y | int | 代收产品类型 | 代收PayType枚举 |
amount | Y | decimal(20,0) | 金额 | [40,15000] |
reusableStatus | Y | boolean | 是否允许多次支付 | false=只能单次收款 true=多次收款 |
mchOrderNo | Y | string(32) | 商户订单号 | mch12345 |
expireTime | Y | long | 过期时间 | 3600 |
notifyUrl | Y | string(250) | 回调地址 | https://merchant.com/webhooks |
nonceStr | Y | string(32) | 随机字符串 | 1863484722378907648 |
remark | Y | string(32) | 备注 | 请使用英文字符或不带重音的西语 |
realName | Y | string(32) | 用户姓名 | Jack |
phone | Y | string(32) | 手机号 | +57xxxxxxx |
email | Y | string(64) | 邮箱 ,会校验邮箱格式。 | example@maildomain.com |
TIP
请注意,目前684180104开头以及6461805201开头的CLABE过期时间为180天,自创建起时间起。 (2024年1月26日调整为180天)
TIP
请注意,目前684180104开头以及6461805201开头的Clabe,如果在距离过期时间不足60天时发生了交易,此CLABE会默认续期有效期为180天。(2024年1月30日调整)
请求示例
curl -L 'baseUrl/api/payIn' \
-H 'MerchantId: 1002001' \
-H 'Sign: A6FC73F7D22EC8B4A064C8FFCC592CBF' \
-H 'Content-Type: application/json' \
-d '{"realName":"Reza Wijaya","amount":"20000.00","reusableStatus":false,"payType":"43","expireTime":3600,"mchOrderNo":"1386556787811426305","notifyUrl":"https://merchant.com/webhooks/payin","currency":"IDR","remark":"Electronic Cigarettes","nonceStr":"16a5a70f43384134bfae33acc77132e0"}'
2
3
4
5
响应参数
参数名 | 类型 | 说明 |
---|---|---|
merchantId | long | 商户Id |
mchOrderNo | string(32) | 商户订单号 |
orderNo | string(32) | 平台订单号 |
amount | decimal(20,2) | 金额 |
orderFee | decimal(20,2) | 手续费 |
payCode | string(32) | OXXO 支付码 /SPEI Clabe 账号 |
reference | string(7) | 交易参考(CIE) |
concept | string(40) | 交易概念 |
bankName | string(32) | 银行名称 |
payUrl | string(250) | 支付信息页 |
payDeskUrl | string(250) | 收银台支付地址 |
响应示例
{
"msg": "SUCCESS",
"code": 200,
"data": {
"merchantId": "1002001",
"mchOrderNo": "test2275700811",
"orderNo": "PAYIN8374561426934530048",
"bankName": "BBVA Bancomer",
"reference": "1411217",
"concept": "33812449733594396233",
"payCode": "000000000000000001",
"payUrl": "http://testpaydesk.mxcashypay.com/index.html?PAYIN8374561426934530048",
"payDeskUrl": "http://testpaydesk.mxcashypay.com/index.html?PAYIN8374561426934530048",
"amount": "152",
"orderFee": "1"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"msg": "Payin_Order_Error",
"code": 500
}
2
3
4
TIP
- 如果您计划自行开发SPEI CLABE还款账号 / OXXO支付码的展示页面,请使用payCode字段。
- 如果您想使用CashyPay提供的支付信息页面,请使用payUrl字段。
TIP
当payType=69
(SPEI Clabe) 时,我们会提供两种不同模式的Clabe收款,二者的区别在于还款时使用的参数不同。同时在限制还款次数,限制还款金额上也有所差异。
Clabe支付和集中式Clabe支付的区别
Clabe支付
此方式每笔订单会给用户创建不同的Clabe账号,但无法校验订单金额,也无法限制还款次数。
还款时用户仅需要使用Clabe账号即可进行转账支付。
集中式Clabe支付
此方式会校验还款金额以及限制还款次数,当金额和订单金额不匹配时,银行会拒绝交易,并自动退款给用户。
还款时用户需要使用以下参数进行转账支付。
payCode
Clabe账号reference
参考编号,不超过7位,用于识别和跟踪交易,在付款页面一般显示为El número de referencia
或者Número De Referencia
concept
交易概念,最长40位,用于识别和跟踪交易,如果返回,必须要让用户正确填写。在付款页面一般显示为y el concepto de pago
或者Concepto
bankName
银行名称,一般无需特意填写,输入clabe账号后大多情况下会自动识别。
用户使用集中式Clabe
付款时的指引
此指引仅在reference
,concept
,bankName
参数存在值时使用。注意示例的参数值,均为沙盒环境的值,实际生产环境请以实际的值为准。
用户使用BBVA
银行时
1.在Pagar
菜单中选择De Servicios
选项并输入Número de convenio CIE
Número de convenio CIE
请输入 reference
的值(1411217)
2.填写信息
Referencia
: 请输入concept
的值(33812449733594396233)。Importe
: $ 40.00 MXNConcepto
: remark
用户使用其他银行时
输入转账和付款信息:
Clabe
: 输入payCode000000000000000001Concepto de pago
: 输入concept 33812449733594396233Referencia
: 输入 reference ,1411217Importe
: 40.00 MXN
以Santander银行为例
查询代收订单
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
关于orderType
为PATCH
时的补充说明
用户不按照订单金额付款或者重复付款会出现补单订单,此时补单订单的orderType
为PATCH
:
orderNo
是针对这笔订单新生成的平台订单号。patchOrderNo
为关联的原订单的平台订单号,patchMchOrderNo
为关联的原订单的商户订单号。mchOrderNo
为关联的原订单的商户订单号(带序列号标识)。注意,此时回调返回的mchOrderNo
末尾会增加序列号标识,用于区分多笔部分还款的订单。
例如您的商户订单号是MCH20230088
,当产生第一笔部分支付时,我们会在原订单的商户订单号mchOrderNo
末尾增加序列号00001
,您收到的回调的mchOrderNo
就是MCH2023008800001
,以此类推。
当发生补单行为时,我们的机器人也会在对应的商户群进行通知,通知会包含所有您需要的信息。
订单的orderType
为API
时:
patchOrderNo
和orderNo相同patchMchOrderNo
和mchOrderNo相同
此时上述参数没有额外的意义。
TIP
fee
和 completionTime
仅在订单成功支付时有值。completionTime
的格式为 yyyy-MM-dd HH:mm:ss
。
代收订单结果通知
异步通知请求
通知地址由商户提供
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,2,4,8,16,32,64,128,256,512分钟
重试,一共重试回调10次。