Screenshots
About this component
Complete payment processing platform supporting cards, digital wallets, BNPL, and 135+ currencies. Industry-leading developer experience with extensive documentation and robust fraud prevention.
Versions
v1.5.0
2026-08-07
- Pluggability: implemented get_client_publishable_key() so the platform reads the Stripe publishable key from the provider instead of a hardcoded account-serializer branch.
- Fixed the checkout handler_config country_code to use the resolved customer/order country supplied by the orchestrator instead of defaulting to US.
v1.4.0
2026-08-02
- Subscriptions: added provider-agnostic reusable-payment-method setup. Declares the reusable_setup capability and implements begin_setup(), which creates a customer-less SetupIntent so the storefront can capture an off-session card WITHOUT charging; the resulting PaymentMethod is attached to the customer at finalize time.
- Checkout handler: added an initializeSetup(bundle, container, onToken, onError) entry that renders a Stripe Payment Element and confirms the SetupIntent (confirmSetup, not confirmPayment), returning the reusable payment method id for recurring billing.
v1.3.0
2026-08-01
- SECURITY: Fixed three-decimal currency handling (KWD, BHD, OMR, JOD, TND). These were treated as zero-decimal and undercharged by 1000x (e.g. KWD 10.500 was sent to Stripe as 10 = 0.010 KWD). They are now converted in thousandths and rounded to Stripe's required multiple of 10; conversion back from Stripe amounts is also corrected.
- SECURITY: Merchant API key is no longer set on the process-global stripe.api_key. Every API call now passes this provider instance's key explicitly, so concurrent providers (different merchants, or test vs live) can no longer be charged/refunded against the wrong account.
- SECURITY: Idempotency keys are now sent on PaymentIntent, Checkout Session, Refund and Subscription creation when the orchestrator supplies an explicit per-attempt/request id (metadata idempotency_key / payment_attempt_id / refund_id). A retry after a lost response no longer creates a second charge, refund, or subscription, while legitimate retries with a new card and repeat operations are not collapsed.
- Amount conversion now rounds (ROUND_HALF_UP) to the currency's minor unit instead of truncating, fixing off-by-one undercharges for amounts with sub-unit precision.
- checkout.session.completed is only treated as a completed payment when payment_status is 'paid'; delayed-payment sessions are reported pending so orders are not fulfilled before funds arrive.
- Subscription invoice webhook amounts are converted using the currency exponent instead of always dividing by 100 (fixes JPY/KWD amounts).
- Subscriptions (native provider): charge amounts use the currency exponent with rounding; PaymentIntent statuses processing/requires_action/requires_capture are mapped to pending (not failed) to prevent double-charge retries; scheduled period-end cancellations return canceled_at=None with a separate effective_cancellation_at instead of a fabricated timestamp.
v1.2.2
2026-07-04
- Fixed 400 'payment_intent_invalid_parameter' from Stripe when enabled_payment_methods contained wallet aliases (apple_pay, google_pay) — these are not valid Stripe payment_method_types values; they surface automatically on PaymentElement when card is enabled and the device supports them. New _filter_stripe_payment_method_types() strips wallet aliases before calling Stripe.
- When no valid payment_method_types remain after filtering, fall back to Stripe's recommended automatic_payment_methods: {enabled: true, allow_redirects: 'if_required'}. Applies to both integrated PaymentElement and hosted Checkout Session modes.
- Include the Stripe error message on failure responses so the orchestrator surfaces the real reason to the storefront instead of the generic 'Payment intent creation failed' fallback.
v1.2.0
2026-03-31
- Accept payment_method_types from orchestration service for per-country method filtering
- Hosted checkout: pass payment_method_types to Stripe Checkout Session when specified
- Integrated checkout: use explicit payment_method_types instead of automatic_payment_methods when specified
- Added **kwargs to create_payment_intent_for_checkout for forward-compatible parameter passing
v1.1.2
2026-03-10
- Fixed webhook URL in setup instructions (was /payment-providers/webhook/{slug}/, corrected to /webhooks/payments/{slug}/)
- Fixed timezone.utc AttributeError in subscription event timestamp parsing
v1.1.1
2026-03-01
- Fixed critical NameError in integrated checkout (undefined customer_country variable)
- Simplified credential initialization - removed redundant workaround now that base class handles dual-credential selection
- Fixed redact_credentials to handle dual-credential format (test_/live_ prefixed keys)
- Fixed webhook verification to fail-secure when webhook secret is not configured
- Removed stale environment field from credential_schema property
- Restored subscription_provider.py for subscription framework compatibility
- Fixed invoice charge type-checking for safe null handling
v1.0.0
2026-02-09
- Initial release with full payment processing support
- Support for cards, digital wallets, BNPL, and bank transfers
- 135+ currency support with automatic zero-decimal handling
- Stripe Checkout (hosted) and Payment Intents (integrated) support
- Webhook integration with signature verification
- Full and partial refund capabilities
- 3D Secure authentication support
- Authorize and capture workflow
Reviews
Ready to install Stripe?
Install from your Spwig admin → Marketplace tab. Don't have a Spwig install yet? The commerce platform is free and open source.
Get Spwig → Browse more