1

Commerce transactions have multiple possible types and statuses:

    const TYPE_AUTHORIZE = 'authorize';
    const TYPE_CAPTURE = 'capture';
    const TYPE_PURCHASE = 'purchase';
    const TYPE_REFUND = 'refund';

    const STATUS_PENDING = 'pending';
    const STATUS_REDIRECT = 'redirect';
    const STATUS_PROCESSING = 'processing';
    const STATUS_SUCCESS = 'success';
    const STATUS_FAILED = 'failed';

Can someone explain to me what each of them means?

3

A transaction can have a single type and status at one time. A transaction can also have a parent transaction relationship.

There are 4 transaction types: authorize, capture, purchase, refund.

A transaction type determines what the transactions is and how it is counted when determining the order totals.

authorize is used when the customer is not immediately charged to their card, but an authorization is placed on their card. The authorization will be captured at a later time, and the customers card will then be charged. An authorization can have the status of pending, redirect, processing, success, or failed.

capture transactions are always child transactions of authorize transactions. You can only capture a authorize transaction that had a success status. A capture can have the status of success, or failed.

purchase is used when the customer is getting charged immediately to their card. An purchase can have the status of pending, redirect, processing, success, or failed.

refund is used when the customer was refunded an amount. It can only be the child of a capture or purchase transactions that have the status of success

There are 5 transaction statuses: pending, redirect, processing, success, failed.

pending status is for when a transaction is first created. It could then be changed to different status once the gateway/customer determines what the transaction should be. For example, changed to the redirect status when the customer is being redirected off-site.

redirect status us when the customer was sent off-site. A redirect status should only be used for authorized and capture transactions as capture and refunds are usually done by an admin from the control panel and not taken off-site to perform those actions.

processing is a semi-successful status introduced due to asynchronous nature of some gateways where knowing if the transaction is successful or failed will happen at a later time. For example, in stripe the customer might be returned from a SCA offsite back to the craft site and we will update the transaction as processing before the webhook comes in with the results of the payment from the bank. When we get a processing status on an authorize or purchase transaction we still 'complete' the cart and turn it into an order. So the only way for a customer to complete a cart is to have a successful purchase or authorization or a successful processing transaction.

success status means the transaction was successful. This covers the authorization, capture, purchase and refund.

failed status means the transaction failed. This covers authorization, capture, purchase and refund.

We will update the docs with the above.

  • Very comprehensive, thanks! Can you also write about concept of "child transactions" a bit? – piotrpog Oct 26 '20 at 10:26
  • Great to see this spelled out. Perhaps be worth explaining how 'capture' can be used just a tad more for non credit card contexts - e.g. we 'capture' a payment once it is visible in our bank account. This then means the order becomes available for our module to push to our external inventory system. – Jeremy Daalder Oct 26 '20 at 21:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.