Stripe payment components for Reflex applications
A Reflex custom component library wrapping @stripe/react-stripe-js for seamless Stripe payment integration in Python.
- Express Checkout — Apple Pay, Google Pay, and Link via
ExpressCheckoutElement - Embedded Checkout — Full Stripe-hosted checkout form in an iframe
- Backend State Management —
StripeStatehandles PaymentIntents and Checkout Sessions - API Routes — Auto-registered FastAPI endpoints for client-server communication
- Type-Safe Config — Pydantic-style
Appearance,ExpressCheckoutOptions, and more
pip install reflex-stripeuv add reflex-stripeDrop in a complete Express Checkout (Apple Pay / Google Pay) with a single provider:
import os
import reflex as rx
import reflex_stripe as stripe
def checkout_page() -> rx.Component:
return stripe.stripe_provider(
stripe.ExpressCheckoutBridge.create(
return_url="/checkout/complete",
),
publishable_key=os.environ["STRIPE_PUBLISHABLE_KEY"],
secret_key=os.environ["STRIPE_SECRET_KEY"],
mode="payment",
amount=1099,
currency="usd",
)Render a full Stripe Checkout form as an embedded iframe:
import os
import reflex as rx
import reflex_stripe as stripe
def checkout_page() -> rx.Component:
return stripe.embedded_checkout_session(
publishable_key=os.environ["STRIPE_PUBLISHABLE_KEY"],
secret_key=os.environ["STRIPE_SECRET_KEY"],
line_items=[{
"price_data": {
"currency": "usd",
"product_data": {"name": "Pro Plan"},
"unit_amount": 2000,
},
"quantity": 1,
}],
return_url="/checkout/complete",
)Register the Stripe backend endpoints on your Reflex app:
app = rx.App()
stripe.register_stripe_api(app)reflex_stripe/
├── base.py # StripeBase — shared component base class
├── models.py # Appearance, ExpressCheckoutOptions, ButtonType, etc.
├── stripe_provider.py # StripeProvider wrapping <Elements> + loadStripe
├── stripe_state.py # StripeState — PaymentIntent & Checkout Session management
├── express_checkout.py # ExpressCheckoutElement + JS bridge
└── embedded_checkout.py # EmbeddedCheckoutProvider + EmbeddedCheckout + bridge
| Layer | Component | Purpose |
|---|---|---|
| Provider | StripeProvider |
Wraps <Elements> with loadStripe() |
| Elements | ExpressCheckoutElement, EmbeddedCheckout |
Stripe UI components |
| Bridges | ExpressCheckoutBridge, EmbeddedCheckoutBridge |
JS glue for event handling |
| State | StripeState |
Backend payment logic (PaymentIntents, Sessions) |
| API | register_stripe_api() |
Auto-registers /api/stripe/* endpoints |
| Variable | Required | Description |
|---|---|---|
STRIPE_PUBLISHABLE_KEY |
Yes | Stripe publishable key (pk_test_... or pk_live_...) |
STRIPE_SECRET_KEY |
Yes | Stripe secret key (sk_test_... or sk_live_...) |
task install # Install dev deps + pre-commit hooks
task lint # Run ruff linter
task typecheck # Run pyright type checker
task test # Run full test suite
task run # Run demo app
task run-docs # Run docs locally- Python 3.11+
- Reflex >= 0.8.0
- Stripe Python SDK >= 12.0.0
Contributions welcome. Please run task lint and task test before submitting a PR.