Execution Flows
Step-by-step checkout flows including shipping save, payment processing, order placement, and guest checkout.
Step-by-step checkout flows including shipping save, payment processing, order placement, and guest checkout.
When the customer completes the shipping step, the frontend calls the shipping information API to save the address and selected shipping method. This triggers totals recalculation and returns available payment methods.
Entry Point
POST /V1/carts/mine/shipping-information
Or: ShippingInformationManagementInterface::saveAddressInformation()
The ShippingInformationManagement validates the incoming data structure
and ensures shipping and billing addresses are properly formatted.
Loads the quote by cart ID. Validates the quote is active, has items, and is not already converted to an order.
Assigns shipping address to quote. For virtual quotes (downloadable only), this step is skipped.
Sets billing address on quote. If "same as shipping" is selected, billing address is copied from shipping.
Validates the selected shipping method is available for the given address.
Throws InputException if method is invalid.
Triggers full quote totals collection with the new shipping method applied.
Returns PaymentDetailsInterface containing available payment methods and updated totals.
Event Dispatched
The quote save triggers sales_quote_save_after which updates the checkout session quote ID.
The order placement flow handles payment information saving and order creation. This is the most critical flow in checkout, with multiple validation and rate limiting steps.
Entry Point
POST /V1/carts/mine/payment-information
Or: PaymentInformationManagementInterface::savePaymentInformationAndPlaceOrder()
The PaymentProcessingRateLimiterInterface checks for abuse.
Default implementation uses CAPTCHA validation.
Calls savePaymentInformation() to store payment method on quote.
This also updates the billing address.
If checkout agreements are enabled, validates that all required agreements have been accepted.
Delegates to CartManagementInterface::placeOrder() from the Quote module.
CartManagement converts quote items to order items, creates the order entity, and processes payment authorization/capture.
After successful order placement, the checkout session is cleared and order confirmation data is stored.
Returns the new order ID (entity_id). Frontend then redirects to success page.
On Success
On Failure
Guest checkout uses masked cart IDs and dedicated Guest* interfaces for security. The flow is similar to authenticated checkout but requires email address and uses public endpoints.
Entry Point
POST /V1/guest-carts/:cartId/payment-information
Or: GuestPaymentInformationManagementInterface::savePaymentInformationAndPlaceOrder()
Guest carts use a masked ID (UUID) instead of the actual quote entity_id. This prevents ID enumeration attacks.
Guest checkout requires email address in the API call. This is used for order confirmation and to check if the customer already exists.
The order is created with customer_is_guest = 1.
No customer entity is created or linked.
Guest endpoints use <resource ref="anonymous" />
in webapi.xml, allowing unauthenticated access.
Account Creation Option
If "Create Account" is selected during guest checkout, the system creates a customer account after order placement and links the order to the new customer.
The totals calculation flow is called dynamically as the customer enters address information. It provides real-time updates of shipping costs, taxes, and grand total.
Entry Point
POST /V1/carts/mine/totals-information
Or: TotalsInformationManagementInterface::calculate()
Loads the active quote for the cart ID.
Temporarily applies the provided address to the quote's shipping address for totals calculation purposes.
If shipping method is provided, applies it to the quote for accurate shipping cost calculation.
Triggers the Quote totals collectors chain to calculate all totals.
Returns TotalsInterface with subtotal, shipping, tax,
discount, and grand total.
Performance Note
Totals calculation is called frequently during checkout (on address change, shipping method change). The Quote module caches calculated totals to avoid redundant calculations within the same request.