Checkout Workflow

The recommended workflow for an external checkout

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#0052FF', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0A1128', 'lineColor': '#0052FF', 'secondaryColor': '#E8F0FE', 'tertiaryColor': '#E8F0FE', 'mainBkg': '#0052FF', 'clusterBkg': '#E8F0FE', 'edgeLabelBackground': '#0A1128', 'fontFamily': 'Montserrat, sans-serif', 'fontSize': '14px', 'actorBkg': '#0A1128', 'actorBorder': '#0052FF', 'actorTextColor': '#ffffff', 'actorLineColor': '#0A1128', 'signalColor': '#0052FF', 'signalTextColor': '#0052FF', 'labelBoxBkgColor': '#E8F0FE', 'labelTextColor': '#0A1128', 'loopTextColor': '#0052FF', 'noteBkgColor': '#E8F0FE', 'noteTextColor': '#0A1128', 'noteBorderColor': '#0052FF', 'activationBorderColor': '#FF3B30', 'activationBkgColor': '#E8F0FE'}, 'themeCSS': '.node rect, .cluster rect, rect.actor { rx: 10px; ry: 10px; } .labelBox, .note { rx: 8px; ry: 8px; } .edgeLabel rect, .activation0, .activation1, .activation2 { rx: 4px; ry: 4px; } .nodeLabel, .edgeLabel, .label, .cluster-label, text, tspan, span, p { font-family: Montserrat, sans-serif; }'}}%%
flowchart TD
    A["Customer selects date/s<br/>for products"] -->|Fetch availability| B["Call Product Availability API<br/>Get capacities, prices, tax info"]
    B --> C["Display products<br/>on checkout"]
    C --> D["Customer adds products<br/>to cart"]
    D --> E{Customer<br/>continues?}
    E -->|Edit cart| C
    E -->|Proceed| F["Collect customer info<br/>name, email, phone"]
    F --> G["Create Capacity Reservation<br/>Valid for 10 minutes"]
    G --> H{Order<br/>confirmed?}
    H -->|Adjust/abandon| I["Delete Capacity Reservation<br/>Release capacity"]
    I --> C
    H -->|Proceed to payment| J["Process payment<br/>ROLLER Payments or external"]
    J --> K{Payment<br/>successful?}
    K -->|Failed| L["Notify customer<br/>Retry payment"]
    L --> J
    K -->|Success| M["Create Booking<br/>Include payment & customer info"]
    M --> N["Booking confirmed<br/>Order complete"]

Detailed workflow:

  1. Product Availability should be called for the date/s the customer has selected on the checkout. Specific product/s or product categories can be specified in the call. This will provide the available capacities remaining for the given date along with relevant product, price and tax information required for display on the checkout. Additional product parameters can be accessed on the Product Detail endpoint if required (these should be cached and not called each time as they will change infrequently).
  2. The customer adds available products to their cart. Products from multiple dates and products can be booked in a single booking.
  3. When the customer proceeds to the next stage of the checkout, the required customer information (name, email and phone) should be collected.
  4. At this stage, a Capacity Reservation should be created for the items the customer has selected. Capacity reservations will be valid for 10 minutes.
  5. If the customer adjusts their order or abandons the checkout, the capacity reservation should be deleted so that capacity may be booked by others, or so that a new capacity reservation can be created for the updated order.
  6. Payment should be taken. Please see here for payment processing using ROLLER Payments. If using payment processing external of ROLLER, only a record of a successful payment can be created in ROLLER.
  7. Once payment is successful, the booking should be created along with the associated payment and customer information using the Create Booking endpoint.

Did this page help you?