Skip to main content
Version: v2

Rollback Strategies

Overview​

This document outlines the comprehensive rollback strategy for the Convenient Checkout Gateway (CCG) when handling split tender payments. The rollback strategy ensures transaction integrity and consistent final states when one payment in a split tender transaction fails or requires cancellation.

Key Concepts
  • Transaction Integrity: Ensuring that a split tender transaction either completes fully or fails completely
  • Rollback: The process of reversing a successful payment when its counterpart in a split tender transaction fails
  • Recovery Mechanisms: Processes to handle cases where the rollback itself encounters issues

Core Principles​

CCG's split tender rollback strategy follows these core principles:

  1. Atomic Transactions: Split tender payments are treated as a single atomic unit - they must either succeed completely or fail completely
  2. Automated Handling: The system automatically initiates rollbacks without merchant intervention
  3. Timely Resolution: Rollbacks are initiated immediately upon detection of a failure
  4. Clear Status Communication: Transaction status clearly reflects partial or complete failures
  5. Financial Protection: Customer funds are protected through appropriate cancellation or refund mechanisms

Rollback Scenarios​

Card + Card​

Card + Card Rollback Use Cases
Failed PaymentSuccessful PaymentRollback ActionFinal Transaction StatusWebhooks
Card 1Card 2 (Authorized)Cancel authorization on Card 2❌ FAILEDPAYMENT_FAILED
Card 2Card 1 (Captured)Issue refund for Card 1❌ FAILEDPAYMENT_FAILED, PAYMENT_REFUNDED

Notes:

  • CCG ensures that if one card payment fails, the other is either cancelled (if authorized) or refunded (if captured), maintaining transaction integrity.
  • Merchants receive clear webhook notifications for each action.

Card + ACH​

Card + ACH Rollback Use Cases
Failed PaymentSuccessful PaymentRollback ActionFinal Transaction StatusWebhooks
CardACH (Accepted)Cancel ACH transaction❌ FAILEDPAYMENT_FAILED
CardACH (Completed)Issue refund for ACH payment❌ FAILEDPAYMENT_FAILED, PAYMENT_REFUNDED
ACHCard (Authorized)Cancel Card authorization❌ FAILEDPAYMENT_FAILED
ACHCard (Captured)Issue refund for Card payment❌ FAILEDPAYMENT_FAILED, PAYMENT_REFUNDED

Notes:

  • ACH cancellations are only possible if the payment is still in an accepted state; otherwise, a refund is issued.
  • Card authorizations are cancelled if ACH fails before card capture.
  • All actions are automated and merchants are notified via webhooks.

ACH + ACH​

ACH + ACH Rollback Use Cases
Failed PaymentSuccessful PaymentRollback ActionFinal Transaction StatusWebhooks
ACH 1ACH 2 (Accepted)Cancel ACH 2 transaction❌ FAILEDPAYMENT_FAILED
ACH 1ACH 2 (Completed)Issue refund for ACH 2 payment❌ FAILEDPAYMENT_FAILED, PAYMENT_REFUNDED

Notes:

  • CCG attempts to cancel the second ACH if possible; otherwise, a refund is issued.
  • All actions are logged and communicated to merchants.

Rollback Process​

When a payment method fails in a split tender transaction, CCG automatically rolls back any successful payments to ensure atomicity and customer protection. The process includes both refunds and cancellations, depending on the payment status and method.

Refunds​

Refunds Process

If a payment is already completed, CCG initiates a refund. Merchants receive a detailed PAYMENT_REFUNDED webhook with:

  • Child Payment Id: The refunded payment
  • Parent Transaction Id: The split tender transaction
  • Refund Reason: CCG ROLLBACK
  • Amount: Full refund amount
  • Status: Refund process status
Refund Notifications
  • Merchants must handle PAYMENT_REFUNDED webhooks with reason CCG ROLLBACK to keep transaction states accurate.
  • No PAYMENT_CANCELLED event is sent for cancellations initiated by CCG as part of rollback.

If a refund is processed as a reversal:

  • PAYMENT_REVERSED notification will be sent. See Refunds and Reversals for details.
  • Reversals are only possible for card transactions.

Cancellation​

Cancel Process

If a payment is still in an accepted or authorized state, CCG initiates a cancellation. The cancellation includes:

  • Child Payment Id: The cancelled payment
  • Parent Transaction Id: The split tender transaction
  • Cancellation Reason: CCG_AUTOMATED_CANCEL
  • Cancellation Message: Split Tender Transaction Failure
  • Status: Cancellation process status
Cancel Notifications
  • Merchant will receive PAYMENT_CANCELLED event as part of attempt initiated
  • No separate PAYMENT_CANCELLED event is sent for cancellations initiated by CCG as part of rollback.

Refunds and Reversal​

Refunds and Reversals
Refund and Reversal

Key Concepts​

  • According to Stripe documentation:
    • Refunds can be processed as reversals if issued shortly after the original charge.
    • Impact: Reversals typically incur lower network fees than standard refunds.

Payment Reversal​

What is Payment Reversal?

As per Stripe, In the case of a reversal, customer won't see a refund credit on their statement – customer will just see the original authorisation drop off their statement entirely after a few days. There will be no payment, and no refund. It'll appear as if the whole transaction never happened. Their bank should be able to confirm this for them. Depending on customer's card issuer, the original charge should have disappeared from their pending charges by T+7 Days

Stripe Response on Reversal Windows​

  • Question: Is there a specific time window during which a refund is processed as a reversal?
  • Stripe Support Response: Slack Thread
    Stripe Response on Payment Reversal Window
    • The window is shortβ€”essentially until money has actually moved.
    • Reversals may be possible for up to a few hours after capture.
    • For uncaptured or expired authorizations, different rules apply.
    • These appear as refunds in your system but cost less due to reduced interchange fees.
    • The main difference is financial: some fees are not charged for reversals.
    • Merchants can determine which transactions were processed as reversals vs. refunds by examining transaction details.

Production Data Analysis - Reversal Processing Timeline​

Case Study: Successful Reversal (64 seconds after capture)
EventTimestampElapsed Time
Payment Initiated21/07/2025, 19:35:47T+0
payment_intent.created21/07/2025, 19:35:48T+1s
payment_intent.amount_capturable_updated21/07/2025, 19:35:49T+2s
Capture Initiated22/07/2025, 19:04:22T+23h 28m 35s
payment_intent.succeeded22/07/2025, 19:04:22T+23h 28m 35s
Refund Request Initiated22/07/2025, 19:05:26T+23h 29m 39s
refund.created22/07/2025, 19:05:27T+23h 29m 40s
charge.refunded22/07/2025, 19:05:27T+23h 29m 40s
refund.updated22/07/2025, 19:05:28T+23h 29m 41s

Key Metrics:

  • Time between capture and refund: 64 seconds
  • Refund processing time: 2 seconds
  • Processed as: Reversal (confirmed via Stripe Dashboard)
  • Fee impact: No Fee Charged

Best Practices & Merchant Guidance​

  • Always use CCG APIs for split tender operations; avoid direct Stripe dashboard actions to prevent indeterminate states.
  • Monitor webhook events (PAYMENT_FAILED, PAYMENT_REFUNDED , PAYMENT_REVERSED) for accurate transaction state tracking.
  • Implement logic to distinguish between merchant-initiated and CCG-initiated rollbacks using the Refund Reason or Cancellation Reason fields.
  • Communicate clearly with customers about the status of split tender payments, especially in the event of rollbacks or reversals.
  • For ACH payments, inform customers that refunds may take 1–3 business days to appear, while card reversals may result in the charge simply disappearing from their statement.