Symptom
You sent sendAbortRequest() to cancel a payment, but the transaction completed anyway — the abort appeared to do nothing. The customer was still charged.
Cause
Abort can only cancel a payment that is still in progress, before host authorization. Once the transaction has been authorized by the host, there is nothing left to abort — the payment has effectively happened. An abort sent after that point is too late and has no effect on the outcome.
This is by design: abort interrupts an in-flight operation; it is not a way to undo a completed one.
Fix
Choose the right tool for where the transaction is in its lifecycle:
- Before authorization —
sendAbortRequest()cancels the in-progress payment. This is the valid window for abort. - After authorization (completed) — abort no longer applies. To undo a completed payment, send a reversal against the original
POITransactionID. See Guide: reversing a transaction.
If you have an abort timer or a user-triggered cancel, expect that aborts fired late in the flow may legitimately have no effect — the transaction had already crossed the authorization point. Handle that case by checking the transaction outcome and reversing if it completed.
Verify
After an abort that may have been late, confirm what actually happened:
- If the payment response indicates the transaction completed, it was authorized before your abort landed — reverse it if you need to undo it.
- A status request can recover the outcome (and the
POITransactionIDyou'd need for the reversal) if you didn't capture it. See Guide: checking transaction status.
Related
- Guide: taking a payment — the abort window within the payment flow.
- Guide: reversing a transaction — undoing a payment that already completed.
- Guide: checking transaction status — recovering the outcome and POI ID.