A transaction is one distinct interaction between Commerce and a payment gateway as a completed order is being charged or refunded.
The typical checkout flow will involve multiple transactions, with the exact steps depending on your configuration, the payment gateway you’re using, and whether the customer’s payment method is approved.
The sum of an order’s transactions determines total paid, total price, and outstanding balance amounts—and those totals determine the order’s payment status.
In Craft Commerce, each of these is represented by a transaction (opens new window) model. A transaction can only have one type and status, and it may have a relationship to a parent transaction.
In the Craft control panel, you’ll find transactions listed in a Transactions tab in any order’s detail page.
# Transaction Types
The transaction type describes the purpose of the transaction and determines how it’s counted when determining order totals.
A transaction may authorize the customer’s payment method to confirm it can be charged, without actually capturing the order amount. In this case, an authorization will be placed on their card but payment will be captured later.
An authorization transaction can have any one of the available transaction statuses.
A capture transaction will only ever be the child of a prior authorize transaction that had a
success status. The capture transaction’s purpose is to claim the entire payment amount from the gateway, similarly to how a check’s payment details would be captured to initiate a bank deposit.
A capture can only have one of two statuses:
The authorize-capture pattern can be used outside credit card contexts.
The manual payment gateway, for example, lets you accept an order with an authorize transaction and manually choose “capture” to indicate payment has been made.
A purchase transaction is used for immediately charging the customer’s card. (In this case, there won’t be prior authorize or capture transactions.)
A purchase transaction can have any one of the available transaction statuses.
A refund transaction is used to credit funds back to the customer, and it can only be the child of a successful
A refund can only have one of two statuses:
# Transaction Statuses
A transaction’s status is
pending when it’s first created.
That status could be changed from
pending once the customer or store manager initiates some action that’s handled by the gateway to determine what next status should be.
The redirect status is used when the customer was sent to an off-site URL to complete the transaction. A redirect status would only apply to authorize and capture transactions—refunds are usually handled by a store manager in the control panel and don’t require off-site steps.
Some gateways handle transactions asynchronously and don’t immediately return a success or failure response.
processing is a semi-successful and often short-lived status that indicates a transaction is in progress and the gateway will follow up once it’s complete.
An example of this is a Stripe customer being returned to the Craft site from a SCA (opens new window) flow. Commerce will update the transaction as
processing until a Stripe webhook arrives with the results of the bank payment.
Once Commerce sets a
processing status on an
purchase transaction, the cart will be completed to become an order. The only way for a customer to complete a cart is to have either a successful purchase, a successful authorization, or a successful
success status indicates that any one of the transaction types was successful.
failed status indicates that any one of the transaction types was failed.
Commerce’s RequestResponseInterface (opens new window) stores the HTTP response code and message from the payment gateway, which may include a reason or reference code for the failed transaction.