自动撤单
当终端的支付流程在进行过程中如果调用支付接口没有返回成功,为了避免交易纠纷,需要调用自动撤单接口完成冲正。
入口
{api_domain}/upay/v2/cancel
签名验证
请参考签名机制文档
请求参数说明
参数 | 参数名称 | 类型 | 必填 | 描述 | 范例 |
---|---|---|---|---|---|
terminal_sn | 收钱吧终端ID | String(32) | Y | 收钱吧终端ID | "00101010029201012912" |
sn | 收钱吧系统订单号 | String(16) | N | 收钱吧系统唯一订单号 | "7894259244061958" |
client_sn | 商户自己的订单号 | String(64) | N | 商户自己订号 | "2324545839" |
sn与client_sn不能同时为空,优先按照sn查找订单,如果没有,再按照client_sn查询
同步返回参数
参数 | 参数名称 | 类型 | 必填 | 描述 | 范例 |
---|---|---|---|---|---|
result_code | 结果码 | String | Y | 结果码表示接口调用的业务逻辑是否成功 | "CANCEL_SUCCESS" |
error_code | 错误码 | String | N | 参考附录:业务执行错误码列表 | "UPAY_TCP_ORDER_NOT_REFUNDABLE" |
error_message | 错误消息 | String | N | 参考附录:业务执行错误码列表 | "订单7894259244061958参与了活动并且无法撤销" |
terminal_sn | 收钱吧终端ID | String(32) | Y | 收钱吧终端ID | "01012010201201029" |
sn | 收钱吧唯一订单号 | String(16) | Y | 收钱吧系统内部唯一订单号 | "7894259244061958" |
client_sn | 商户订单号 | String(64) | Y | 商户系统订单号 | "22345677767776" |
status | 流水状态 | String(32) | Y | 本次操作对应的流水的状态 | "SUCCESS" |
order_status | 订单状态 | String(32) | Y | 当前订单状态 | "CANCELED" |
payway | 支付方式 | String(32) | Y | 订单支付方式 | "3" |
payway_name | 支付方式名称 | String(128) | Y | "微信" | |
trade_no | 支付平台的订单凭证号 | String(64) | Y | 支付宝或微信的订单号 | "2006101016201512090096528672" |
total_amount | 交易总金额 | String(10) | Y | 原始交易实收金额 | "100" |
net_amount | 剩余金额 | String(10) | Y | 实收金额减退款金额 | "0" |
settlement_amount | 本次操作金额 | String(10) | Y | 订单未完成支付时撤单,settlement_amount=0。支付成功后撤单settlement_amount=支付金额。 | "100" |
finish_time | 上次操作在收钱吧的完成时间 | String(13) | N | 时间戳,本次动作在收钱吧的完成时间,撤单成功才会有值返回 | "1449646835244" |
channel_finish_time | 上次操作在支付平台完成的时间 | String(13) | N | 时间戳,本次动作在微信或支付宝的完成时间,撤单成功才会有值返回 | "1449646835221" |
subject | 商品概述 | String(32) | Y | 交易时候的商品概述 | "wx" |
operator | 操作员 | String(64) | Y | 执行上次业务动作的操作员 | "Obama" |
返回的状态码请参考附录
手动撤单
如果一笔订单已经支付成功,在系统规定的时间范围内,可以调用这个接口完成全额退款,并且不会触发任何手续费。手动撤单和自动撤单的区别只是撤单目的不同,实际执行的业务逻辑是完全一样的。
入口
{api_domain}/upay/v2/revoke
签名验证
请参考签名机制文档
请求参数说明
参数 | 参数名称 | 类型 | 必填 | 描述 | 范例 |
---|---|---|---|---|---|
terminal_sn | 收钱吧终端ID | String(32) | Y | 收钱吧终端ID | "00101010029201012912" |
sn | 收钱吧系统订单号 | String(16) | N | 收钱吧系统唯一订单号 | "7894259244061958" |
client_sn | 商户自己的订单号 | String(64) | N | 商户自己订号 | "2324545839" |
sn与client_sn不能同时为空,优先按照sn查找订单,如果没有,再按照client_sn查询
同步返回参数
参数 | 参数名称 | 类型 | 必填 | 描述 | 范例 |
---|---|---|---|---|---|
result_code | 结果码 | String | Y | 结果码表示接口调用的业务逻辑是否成功 | "CANCEL_SUCCESS" |
error_code | 错误码 | String | N | 参考附录:业务执行错误码列表 | "UPAY_TCP_ORDER_NOT_REFUNDABLE" |
error_message | 错误消息 | String | N | 参考附录:业务执行错误码列表 | "订单7894259244061958参与了活动并且无法撤销" |
terminal_sn | 收钱吧终端ID | String(32) | Y | 收钱吧终端ID | "01012010201201029" |
sn | 收钱吧唯一订单号 | String(16) | Y | 收钱吧系统内部唯一订单号 | "7894259244061958" |
client_sn | 商户订单号 | String(64) | Y | 商户系统订单号 | "22345677767776" |
status | 流水状态 | String(32) | Y | 本次操作对应的流水的状态 | "SUCCESS" |
order_status | 订单状态 | String(32) | Y | 当前订单状态 | "CANCELED" |
payway | 支付方式 | String(32) | Y | 订单支付方式 | "3" |
payway_name | 支付方式名称 | String(128) | Y | "微信" | |
trade_no | 支付平台的订单凭证号 | String(64) | Y | 支付宝或微信的订单号 | "2006101016201512090096528672" |
total_amount | 交易总金额 | String(10) | Y | 原始交易实收金额 | "100" |
net_amount | 剩余金额 | String(10) | Y | 实收金额减退款金额 | "0" |
settlement_amount | 本次操作金额 | String(10) | Y | 订单未完成支付时撤单,settlement_amount=0。支付成功后撤单settlement_amount=支付金额。 | "100" |
finish_time | 上次操作在收钱吧的完成时间 | String(13) | N | 时间戳,本次动作在收钱吧的完成时间,撤单成功才会有值返回 | "1449646835244" |
channel_finish_time | 上次操作在支付平台完成的时间 | String(13) | N | 时间戳,本次动作在微信或支付宝的完成时间,撤单成功才会有值返回 | "1449646835221" |
subject | 商品概述 | String(32) | Y | 交易时候的商品概述 | "wx" |
operator | 操作员 | String(64) | Y | 执行上次业务动作的操作员 | "Obama" |
请参考返回码的状态请参考附录
撤单返回示例
1.撤单成功
```json
{
"result_code": "200",
"biz_response": {
"result_code": "CANCEL_SUCCESS",
"data": {
"sn": "7894259244064831",
"client_sn": "22345677767776",
"status": "SUCCESS",
"payway": "3",
"sub_payway": "1",
"order_status": "CANCELED",
"total_amount": "1",
"net_amount": "0",
"finish_time": "1450090828489",
"subject": "wx",
"store_id": "49"
}
}
}
```
2.撤单失败
```json
{
"result_code": "200",
"biz_response": {
"result_code": "CANCEL_ERROR",
"error_code": "UPAY_TCP_ORDER_NOT_REFUNDABLE",
"error_message": "订单7894259244061958参与了活动并且无法撤销"
}
}
```
撤单接口接入常见问题
1.手动撤单和自动撤单有什么区别?
手动撤单和自动撤单的区别只是撤单目的不同,实际执行的业务逻辑是完全一样的。
2.撤单接口调用限制
撤单接口,一笔订单只能在当天进行一次撤单,撤单的时候是全额退款,包括支付手续费。进行过退款的订单不能撤单。
3.手动撤单可以在订单支付完成后多久以内可以提交请求?
过了当天无法撤单。
4.什么时候会用到自动撤单接口(cancel)
自动撤单接口是为了避免出现单边账而出现的。当一笔交易状态未知时,为了避免产生单边账,就需要调用自动撤单接口发起撤单,从而避免产生单边账