v1.11.1 - A payment that went through is no longer reported as declined #
When a buyer pays again on a checkout session where an earlier attempt failed, the SDK now waits for the result of the new payment instead of reporting the earlier failure, and declines found while a payment is processing carry their decline code.
09 Oct 2026
When a buyer paid again on a checkout session after an earlier attempt had failed, for example in the fallback checkout the automatic payment button opens after a declined saved card, the SDK could read the earlier failure as the result of the new payment. It called onDecline while the new payment went on to succeed, so a buyer who was told the payment had failed could pay a second time.
What changed
- Only the submitted payment's failure counts. While a payment is still processing, the SDK treats a failed attempt as the result only when it belongs to the payment just submitted. A failure left over from an earlier attempt on the same session is ignored, and the SDK keeps waiting within the existing processing time limit.
- Failures already reported are not reported again. When the SDK cannot tell which payment it submitted, it ignores a failure it has already reported for that session, including one reported by another part of the SDK on the same page, such as the automatic payment button before its fallback checkout.
- Checkout confirms the session before declining. Before
SplitCardFormreports a decline that arrived while a card, wallet or PayPal payment was processing, including in the fallback checkout the automatic payment button opens, it reads the session again. If the session is already complete or authorized, it callsonCompleteinstead ofonDecline. A saved payment method that the React checkout component charges itself, and the PayPal button of a PayPal-only session, skip this extra read; the two checks above still apply to them. - Declines carry their detail. A decline found while the payment was processing now includes a
code, and adeclineCodewhen the billing API reports a decline reason, ononDeclineand in thePaymentAPI.processPaymentresponse body. - Timeouts are unchanged. If the processing time limit runs out before the submitted payment has a result, the outcome is still
checkout_processing_timeout.
Integration notes
No code changes are needed.