====== Magento 2 React Checkout Pro Extension ======
===== Extension context =====
This is a Toweringmedia Magento 2 extension guide in the Checkout and Payments category. Use this page for installation, configuration, validation, and go-live troubleshooting.
- **Module name**: `Toweringmedia_ReactCheckoutPro`
- **Composer package**: `toweringmedia/module-react-checkout-pro`
- **Primary storefront change**: Replaces `/checkout` with React Checkout Pro.
===== Quick links =====
- [[magento2:extensions:start|Magento 2 extension index]]
- [[magento2:start|Magento 2 docs home]]
- [[magento2:extensions:toweringmedia-module-moneris|Magento 2 Moneris Payment Extension]]
- [[magento2:extensions:toweringmedia-module-authorizenet|Magento 2 Authorize.Net Payment Extension]]
- [[magento2:extensions:toweringmedia-module-react-checkout-pro-express|Magento 2 React Checkout Pro Express Extension]]
===== Overview =====
React Checkout Pro is a modern Magento 2 checkout replacement built for autosave-first behavior and faster completion.
- Replaces default checkout flow with a React-based single-page experience.
- Saves contact, address, shipping, and payment selections as the shopper interacts.
- Supports guest checkout or account-required checkout based on Magento guest policy.
- Supports optional Express wallet add-on and optional payment/anti-bot integrations.
===== Before you configure =====
- Magento 2.4.x with CLI access.
- Module installed and enabled.
- Admin access to:
- `Stores > Configuration > Sales > Checkout React Pro`
- Confirm Magento guest policy in:
- `Stores > Configuration > Sales > Checkout > Checkout Options > Allow Guest Checkout`
==== Base + add-on compatibility ====
- **Base (required)**: `toweringmedia/module-react-checkout-pro`
- **Express add-on**: `toweringmedia/module-react-checkout-pro-express`
- Requires `Toweringmedia_AuthorizeNet` and HTTPS storefront.
- **Payments**:
- Moneris: `toweringmedia/module-moneris`
- Authorize.Net: `toweringmedia/module-authorizenet`
- **Anti-bot (optional)**:
- `toweringmedia/hyva-recaptcha-v3`
- **Shipping base guides**:
===== Step-by-step configuration workflow =====
==== 1) Install and enable ====
From Magento root:
composer require toweringmedia/module-react-checkout-pro
php bin/magento module:enable Toweringmedia_ReactCheckoutPro
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f
php bin/magento toweringmedia:react-checkout-pro:collect
php bin/magento cache:flush
==== 2) Enable checkout takeover ====
Go to:
`Stores > Configuration > Sales > Checkout React Pro > Checkout`
Set:
- **Enable React Checkout Pro** = **Yes**
==== 3) Apply safe starting values ====
Set:
- **Enable Express Checkout Section** = **No** (enable only after Express dependencies are complete)
- **Enable Discount Code Field** = **Yes**
- **Show Vendor Name (Debug)** = **No**
- **Enable "Show more options"** = **Yes**
- **"Show more options" label** = `Show more options`
==== 4) Validate account policy behavior in frontend ====
- If guest checkout is enabled (`checkout/options/guest_checkout = 1`), guest flow is available.
- If guest checkout is disabled (`checkout/options/guest_checkout = 0`), checkout shows **Account required** and blocks order placement until sign-in/account creation requirements are met.
{{:magento2:extensions:screenshots:toweringmedia-module-react-checkout-pro-admin-top.png|React Checkout Pro frontend state}}
{{:magento2:extensions:screenshots:toweringmedia-module-react-checkout-pro-admin-fields.png|React Checkout Pro account required state when guest checkout is disabled}}
===== Configuration reference =====
^ Field ^ Purpose ^ Recommended starting value ^
| `reactcheckoutpro/checkout/enabled` | Enable checkout takeover on `/checkout` | `Yes` |
| `reactcheckoutpro/checkout/enable_express_checkout` | Show/hide Express wallet section | `No` initially |
| `reactcheckoutpro/checkout/enable_discount_code` | Show coupon/discount field | `Yes` |
| `reactcheckoutpro/checkout/show_vendor_name` | Show vendor names for debugging | `No` |
| `reactcheckoutpro/checkout/payment_layout_json` | Drag/drop JSON override for payment grouping | blank initially |
| `reactcheckoutpro/checkout/payment_always_first` | Pin payment codes first | `toweringmedia_authorizenet` if used |
| `reactcheckoutpro/checkout/payment_primary` | Main payment list codes | primary gateway code(s) |
| `reactcheckoutpro/checkout/payment_more` | Payment codes under “more options” | `checkmo` (adjust per policy) |
| `reactcheckoutpro/checkout/payment_more_label` | Disclosure button label | `Show more options` |
| `reactcheckoutpro/checkout/payment_more_options_enabled` | Enable grouped payment list | `Yes` |
| `reactcheckoutpro/applepay/domain_association` | Apple Pay domain association file content | blank until Apple Pay setup |
| `reactcheckoutpro/dev/show_debug_panels` | Show checkout debug panels | `No` in production |
| `reactcheckoutpro/alerts/payment_failure_email_enabled` | Send payment-failure alert email | `No` initially |
| `shipping_guard/general/enabled` | Enable shipping guard protections | `Yes` |
| `shipping_guard/general/positive_cache_ttl` | Success cache TTL (minutes) | `15` |
| `shipping_guard/general/invalid_throttle` | Invalid-input retry throttle (seconds) | `60` |
| `shipping_guard/general/include_weight_subtotal` | Include cart weight/value in key | `Yes` |
| `shipping_guard/general/log_level` | Shipping guard diagnostics level | `errors` |
===== Go-live validation checklist =====
- [ ] `/checkout` loads React Checkout Pro for a normal cart.
- [ ] Autosave behavior works for contact, address, shipping, and payment steps.
- [ ] Virtual cart behavior is correct (shipping method hidden/skipped).
- [ ] Guest policy matches storefront behavior (`checkout/options/guest_checkout`).
- [ ] With guest disabled, **Account required** appears and Place Order remains blocked until requirements are met.
- [ ] Primary payment method can place an order successfully.
- [ ] Express buttons render only when Express + Authorize.Net + HTTPS requirements are satisfied.
- [ ] No critical JS console errors and no blocking Magento checkout errors in logs.
===== Troubleshooting by symptom =====
==== Checkout page is blank ====
- Check browser console for JavaScript runtime errors.
- Redeploy static content and flush cache:
php bin/magento setup:static-content:deploy -f
php bin/magento cache:flush
==== “Account required” appears unexpectedly ====
- Confirm Magento guest setting:
- `checkout/options/guest_checkout`
- If this is set to **No**, account-required behavior is expected.
- If this is set to **Yes**, recheck cached config and store scope.
==== Express buttons do not show ====
- Confirm `Toweringmedia_ReactCheckoutProExpress` is installed/enabled.
- Confirm `Toweringmedia_AuthorizeNet` is installed/enabled.
- Confirm **Enable Express Checkout Section** is enabled in Checkout React Pro config.
- Confirm storefront is HTTPS.
==== Payment appears but fields/tokenization fail ====
- For Moneris, verify hosted/direct setup and environment credentials.
- For Authorize.Net, verify gateway configuration and active method state.
- Hard refresh checkout to clear stale session/form key state.
==== Shipping quotes are missing or inconsistent ====
- Verify carrier modules (UPS/USPS/FedEx) are configured and active.
- Review Shipping Guard config for aggressive throttling behavior.
- Verify address/cart data completeness.
===== Related Magento 2 docs =====
- [[magento2:extensions:start|Magento 2 extension index]]
- [[magento2:start|Magento 2 docs home]]
- [[magento2:extensions:toweringmedia-module-moneris|Magento 2 Moneris Payment Extension]]
- [[magento2:extensions:toweringmedia-module-authorizenet|Magento 2 Authorize.Net Payment Extension]]
- [[magento2:extensions:toweringmedia-module-react-checkout-pro-express|Magento 2 React Checkout Pro Express Extension]]