Avoid Common Misconfigurations
Diagnose and resolve common configuration issues across cart, checkout, pricing, and account-based flows.
-
Using Custom UI Before Checkout Completes
Problem: Custom UI components invoke before previous Checkout API completes (still returns 202).
Impact: Components use incomplete or inconsistent data.
Solution: Disable or hide custom components until API returns 200 OK.
-
Executing Custom Apex Prematurely
Problem: Custom Apex calls run without verifying Checkout API completed.
Impact: Logic consumes incomplete data, leading to inconsistent results.
Solution: Poll GET
/checkoutsuntil you receive 200 OK, then execute custom logic. -
Invalid Custom Payment Configuration
Problem: Custom payment (like Cash on Delivery) doesn't meet API expectations.
Impact: API returns "Looks like the payment method isn't authorized" error.
Requirements — Place Order API:
- Provide Purchase Order Number, OR
- Provide valid PaymentMethod and PaymentGroup on WebCart
Place Order Action API:
- Provide Purchase Order Number, OR
- Provide valid PaymentGroup on WebCart AND
- Verify: TotalAuthAndSaleAmount + PendingAuthAndSaleAmount = GrandTotalAmount (or FirstPymtGrandTotalAmount for subscriptions)
-
Concurrent Cart Updates
Problem: Custom Apex modifies cart while Checkout API is in progress.
Impact: Cart state mismatch causes "cart is currently in use" error.
Solution: Avoid concurrent operations on the cart. Wait for Checkout APIs to return 200 OK before running custom code that modifies cart.
-
Price Book Mismatch on Order
Problem: Custom logic sets or updates Order.Pricebook2Id, creating mismatch with order products.
Impact: Validation fails with "Order Products must have a Price Book Entry that belongs to the Price Book related to the parent Order" error.
Solution:
- Make sure that Order.Pricebook2Id matches the price book used by all order products, OR
- Turn on the Enable Multiple Price Books for Orders setting
-
Billing Address Override
Problem: Custom Apex updates billing address before user enters checkout or before shipping address is provided.
Impact: Payment details become invalidated, billing address is overridden or lost.
Solution:
- Use Checkout Payment API to set billing address, OR
- Update billing address only after checkout reaches payment stage
-
Duplicate Orders and Order Summaries
Problem: Custom Record-After-Save flow (like Create Order Summary) runs on Order object, automatically creating Order Summary when Order record is created.
Impact:
- Cart isn't properly closed
- OrderIngestionJob retries processing
- Creates duplicate Orders and Order Summaries
Solution: Configure the flow to exclude B2B web stores. Add conditions so the flow doesn't run for B2B checkout scenarios.
-
Order Summary Failure Without Payment Reversal
Problem: Place Order Actions API succeeds but asynchronous Order Summary creation fails (only affects Place Order Actions API).
Impact: Order is placed but Order Summary creation fails, leaving transaction inconsistent. Payment remains captured and isn't automatically refunded.
Solution: Turn on the
CheckoutReverseAuthEnabledorg permission to reverse payments if checkout fails or is cancelled. Note: Refunds can incur additional charges from the payment provider. -
Missing Pay Now Template
Problem: Pay Now template doesn't appear when creating new store in Salesforce Foundation org.
Impact: Can't access Pay Now template during store creation.
Solution: Add free Salesforce add-on Payments license to enable Pay Now template.
-
Phone Number Validation Errors
Problem: Checkout fails with "Select your country from the dropdown menu, and then enter your phone number" or unexpected phone number format changes.
Impact:
- Validation fails for unsupported country codes (like Costa Rica)
- Phone numbers normalize to E164 format, removing hyphens and formatting
Solution: Enable CheckoutSkipPhoneValidation org permission to bypass validation if default behavior doesn't meet requirements.
-
Invalid Checkout Session Status
Problem: Custom flows invoke
Sfdc_Checkout.CheckoutOrderService.cartToOrderSummarywhile Place Order Actions API is enabled.Impact: Method expects CheckoutSessionStatus to be PENDING_CLOSED but actual status is ACTIVE, causing "Invalid checkout session status" error.
Solution:
- Switch to Commerce Webstore Checkout Orders API, OR
- Use Commerce Webstore Checkout Place Order Action API instead of custom Apex method
-
Asynchronous Payment Providers with Place Order API
Problem: Payment providers confirm payments asynchronously but you're using Place Order V1.
Impact: Orders are created regardless of payment status. Payment confirmation occurs later, potentially after order creation without successful payment.
Solution: Switch to Commerce Webstore Checkout Place Order Action API, which creates orders only after receiving payment confirmation.
-
Concurrent Order Retrieval After Order Placement
Problem: Custom Apex retrieves orders immediately after invoking Place Order API.
Impact: Order creation occurs asynchronously. Concurrent requests cause record locking issues and failures in order creation.
Solution: Avoid running custom logic that queries or modifies orders concurrently with asynchronous cart-to-order process.
-
Long-Running Callouts in Extensions
Problem: Extensions include callouts taking longer than 2 seconds.
Impact: Total processing time exceeds limits (over 5 seconds), causing integration retries. Multiple processes contend for same cart resources.
Solution:
- Make sure that callouts complete within 2 seconds, OR
- Don't invoke GET /checkouts prematurely—allow time for previous operation to complete
-
Custom Validation Exceptions
Problem: Validation rule or trigger blocks record updates during cart-to-order or order summary processing.
Impact: Process fails with FIELD_CUSTOM_VALIDATION_EXCEPTION, interrupting checkout completion.
Solution: Review and update validation rules and triggers to align with checkout and order creation flow.
-
ListPrice Mapping
Problem: CartItem.SalesPrice maps to OrderItem.ListPrice by default, but you expect CartItem.ListPrice to map instead.
Impact: Mapping appears incorrect based on expectations.
Solution: Enable SalesPriceToListPriceMap org permission to map CartItem.ListPrice to OrderItem.ListPrice.
-
Missing CartValidationOutput Records
Problem: Custom extensions (Tax, Inventory, Pricing, Promotions, Shipping) don't create CartValidationOutput records when failures occur.
Impact: Checkout remains in inconsistent or blocked state, making it difficult to surface and handle errors.
Solution: Make sure that all extensions create CartValidationOutput records upon failure.
-
Creating Checkout Session via Custom Apex
Problem: Custom Apex creates CartCheckoutSession records while also using POST /checkouts API.
Impact: POST
/checkoutsAPI doesn't expect existing checkout session, leading to conflicts or unexpected behavior.Solution: Use the POST
/checkoutsAPI exclusively to manage checkout session creation. Avoid custom implementations for out-of-the-box functionality.