取消交易
下单后您可以在一定时间窗口期内通过使用 cancel 接口主动关闭某笔交易,支持取消的时间窗口期以合约划定为准。
取消交易的关键业务信息如下:
- 在支付成功之前发起取消的交易,买家将无法继续支付。
- 买家支付成功后发起取消的交易,资金会原路退回用户账户。
- 手续费:被取消的交易不会产生手续费。
- 是否允许部分取消:不允许。取消会对整个订单进行取消。
- 取消窗口期:不同支付方式的窗口期有差异。具体请查看以下表格:
支付方式 | 取消窗口期 |
印尼本地支付方式及 JKOPay | 不支持取消。 |
泰国网上银行、移动银行 APP 和银行转账类支付方式 |
|
卡支付 |
|
Mercado Pago(巴西、智利、墨西哥和秘鲁) | 支付成功后七天内可以取消交易。 |
其他支付方式 | 支付成功后可在 T+1日的00:15(UTC+8:00)之前取消。 |
表 1. 支付方式取消窗口期
使用场景
如果您有明确的主动关单场景,如闪购、酒店预订、机票购买等,则需要集成 cancel 接口。可以针对以下情况之一发起交易取消,交易取消后,交易状态变为 CANCELLED。即使交易取消后收到支付成功的异步通知,您系统中的交易状态仍然应保持 CANCELLED。针对不同场景进行的交易取消,Antom 会相应进行处理:
场景 | 调用接口后返回 result.resultStatus=S |
交易已支付,在取消时限内发起取消。 | 全额退款,不收取消交易手续费。 |
交易已支付,交易结果无法通过 Antom 异步通知和调用 inquiryPayment 接口获取,发起取消。 | 关闭交易,若后续收到支付成功异步通知则全额退款,不收取消交易手续费。 |
买家未提交支付:例如在 AlipayHK 卖家未点击确认按钮。 | 买家仍然可以授权和支付。 |
买家已提交支付,在付款时限内(10 分钟)发起取消。 | 买家无法支付,但是可以继续授权。 |
表 2. 取消交易场景及处理
注意:
- 已发生过退款的交易(包括全额退款和部分退款)不支持取消, 取消已退款的交易将返回错误码
PROCESS_FAIL。- 即使交易取消后收到支付成功的异步通知,您系统中的交易状态仍然应保持
CANCELLED。
取消交易
步骤 1:调用接口
当您关闭订单后又收到了 Antom 的支付成功异步通知时,需要调用 cancel 接口取消交易。在请求中传入以下 2 种 ID 中的一个:
参数 | 是否必填 | 说明 |
paymentId | 否 | 下单时由 Antom 端返回的唯一交易 ID。 |
paymentRequestId | 否 | 下单时由商家分配的唯一请求 ID。 |
表 3. 接口传参说明
public static void payCancel() {
AlipayPayCancelRequest alipayPayCancelRequest = new AlipayPayCancelRequest();
// 替换为您的 paymentRequestId
alipayPayCancelRequest.setPaymentRequestId("yourPaymentRequestId");
AlipayPayCancelResponse alipayPayCancelResponse = null;
try {
alipayPayCancelResponse = CLIENT.execute(alipayPayCancelRequest);
} catch (AlipayApiException e) {
String errorMsg = e.getMessage();
// 处理错误情况
}
}取消支付请求代码示例:
{
"paymentId": "2019061218401080010018882020035XXXX"
}
{
"paymentRequestId": "paymentRequestIdXXXX"
}取消支付响应代码示例:
{
"cancelTime": "2019-06-12T19:07:11+08:00",
"paymentId": "2019061218401080010018882020035XXXX",
"paymentRequestId": "pay_2089760038715669_20277574507XXXX",
"result": {
"resultCode": "SUCCESS",
"resultMessage": "Success",
"resultStatus": "S"
}
}步骤 2:获取取消结果
在您调用 cancel 接口后,Antom 会通过 result.resultStatus 字段同步返回该次交易的取消结果。
下表展示了取消支付的响应中 result.resultStatus 字段可能返回的值,请您根据指引进行处理:
result.resultStatus | 信息 | 处理建议 |
S | 表示取消成功。 | 无需进一步操作。 注意:若接口调用时买家未完成支付提交,支付流程仍可持续进行。 |
F | 取消失败。 | 您可以根据 resultCode 进行相关处理。 |
U | 因未知原因取消失败。 | 保持原请求不变重新调用接口以解决问题。如果问题未解决,请联系 Antom 技术支持 |
表 4. result.resultStatus 字段可能返回的值
注意:如果您未收到响应报文,可能是网络超时所致。保持原请求不变重新调用接口以解决问题。如果问题未解决,请联系 Antom 技术支持。