End-to-end commerce checklist.
How Struxa commerce works
Core commerce sells published content entries from a configured product content type via Stripe Checkout. Products are entries with price fields—not a separate product table.
Prerequisites
- Run
composer migrate(includes commerce and digital grant tables) - Stripe account with test and live API keys
- Permission
manage_commercefor admin setup
Setup checklist
- Product content type — Import Product store blueprint from Tools → Blueprints, or create a type manually with commerce field conventions.
- Commerce → Commerce settings
- Enable commerce
- Set product content type slug (default
product) - Set currency (
gbp,usd, …) - Optional: order notification email, customer confirmation emails, inventory tracking
- Optional: flat tax, shipping, allowed countries
- Add Stripe secret, publishable, and webhook signing keys
- Commerce → Coupons — Create discount codes for cart checkout.
- Stripe Dashboard — Webhook endpoint
https://your-site/commerce/stripe/webhook- Events:
checkout.session.completed,checkout.session.expired
- Events:
- Create products — Published entries with
price_cents,purchasableon, stock if tracking enabled. - Verify storefront —
/shop, product singles, cart, test checkout with Stripe test card.
Storefront routes
| Route | Purpose |
|---|---|
/shop | Product catalog grid |
/commerce/cart | Session cart |
/commerce/checkout | Buy now (POST, single item) |
/commerce/cart/checkout | Multi-item cart checkout (POST) |
Architecture overview
Key services: ProductResolver, CartService, StripeCheckoutService, OrderFulfillmentService, DigitalFulfillmentService. See developer docs in docs/commerce.md.
Troubleshooting
- Shop empty — Commerce disabled, wrong product type slug, or no published purchasable entries.
- Buy button missing —
purchasableoff or out of stock when inventory tracking enabled.