flux-se/payum-stripe-bundle
Integrates the Stripe payment gateway into Symfony applications via Payum, providing gateway factory configuration and actions for handling Stripe payments, captures, and refunds through a unified API.
Architecture fit. Unchanged and still the decisive issue: this is a Symfony bundle, not a Laravel package. It ships a DI extension, a configuration tree, and service definitions that wire payum/payum to payum/stripe via a StripeCheckoutSession gateway factory. In a Symfony or Sylius application it drops in cleanly; in a Laravel application the bundle itself is unusable and only the underlying payum/stripe package is consumable. For a Laravel shop this remains a partial fit at best, and a strong fit only if the broader platform is already Symfony-based or the team is deliberately adopting Payum as its payment abstraction. v3.0.1 does not change this: no Laravel service provider, no framework-agnostic factory, no change to the integration surface.
Integration feasibility. Medium-low for Laravel, unchanged. The viable path is still to skip the bundle and bind payum/payum + payum/stripe manually: register a gateway factory, implement StorageInterface for tokens against Eloquent, and expose Payment/Capture controllers yourself. That is a multi-day spike, not an afternoon. The payoff — a framework-agnostic payment abstraction with a hosted Checkout Session redirect that keeps PCI scope at SAQ A and delegates SCA/3DS to Stripe — remains genuinely attractive. The cost is that you reimplement everything the bundle does for free in Symfony, and you own that glue indefinitely. Nothing in this release reduces that cost.
Technical risk. Unchanged in substance, marginally improved on the continuity axis. Adoption signal is still weak at the package level — low stars and near-zero dependents mean almost no peer validation of edge cases such as partial refunds, session expiry, duplicate webhook delivery, currency mismatch, or multi-gateway routing. Payum's action/request/token model remains a substantial conceptual layer over the Stripe SDK, and debugging divergences runs through Payum internals rather than Stripe's own documentation. What v3.0.1 does tell us is that the flux-se fork is actively tracking Symfony's release cadence — shipping Symfony 8 support promptly is a real, if narrow, positive signal about maintainer engagement. It is a patch release with no behavioral changes, so it says nothing new about bus factor, and nothing about the payment-behavior gaps.
Key questions. All prior questions remain open, and this release answers none of them: Does the gateway pin a Stripe API version, and who upgrades it? Is webhook signature verification implemented in the bundle or expected of the host app? Does it cover refunds and partial refunds, or capture only? Does it support setup and subscription Checkout modes, or one-time payment only? What are the token storage retention and purge semantics? Is this fork diverging from or tracking the upstream Sylius bundle? One new question prompted by this release: does the package still support the older Symfony and PHP versions in your matrix, or has the supported range been narrowed? Adding Symfony 8 support (Symfony 8 requires PHP 8.4) implies the constraint matrix has moved forward — confirm whether older branches are still tested or whether 3.0.x is now Symfony 8-only at the top of the range.
Stack fit. Unchanged. If the target is Sylius or a Symfony service, fit is high: standard bundle registration, config under payum_stripe, and the gateway participates in the existing Payum payment state machine — and it is now a slightly safer bet on a modern Symfony stack given the 8.x support. If the target is Laravel, fit remains conditional on a deliberate decision to adopt Payum. Without that decision, Laravel Cashier or a thin service around stripe/stripe-php plus Stripe Checkout delivers the same SCA and PCI outcomes with far less abstraction. Treat the bundle as a reference implementation for how to wire Payum to Stripe, not as a Laravel dependency.
Migration path. Unchanged. Route A (greenfield Laravel): implement a PaymentGateway interface internally with a Stripe Checkout driver, and only later swap in Payum if multi-provider abstraction becomes a real requirement. Route B (committed to Payum): vendor the bundle's service definitions as your integration spec, port them to Laravel service providers, and implement StorageInterface on Eloquent for Payment, Token, and Agreement equivalents. Route B remains the only way this package's value is realized outside Symfony, and v3.0.1 adds no tooling to make it easier.
Compatibility. Updated on one axis: the package now supports Symfony 8 in addition to its previously supported range. Verify the full matrix rather than assuming breadth — check PHP version support against your runtime (Symfony 8 pushes the floor to PHP 8.4, so confirm your own PHP version and whether older Symfony/PHP combinations remain within the constraint set), the payum/stripe version's pinned Stripe API, and any Symfony components you pull transitively. The Eloquent-backed token storage gap is untouched and remains the single largest piece of custom code and the most likely source of subtle bugs (token collision, expiry, replay). Doctrine is still the assumed persistence layer throughout Payum; every migration away from it is bespoke.
Sequencing. Unchanged, and the upgrade itself is trivial: this is a patch bump, so adopting it is a composer constraint change plus a regression run, not a migration. The only sequencing note is to pin to 3.0.0 if your CI matrix still runs Symfony 6/7 and you have not yet confirmed 3.0.1 retains those constraints. Build sequence stays: (1) Spike — create a Checkout Session, complete a 3DS test payment, confirm the redirect and capture round-trip end to end. (2) Token storage and gateway registry. (3) Webhook ingestion with idempotency keys and signature verification. (4) Refund and partial-refund paths. (5) Reconciliation and admin visibility. Do not sequence webhooks after go-live; they are the correctness backbone of the whole flow.
Maintenance. Slightly improved signal, same underlying recommendation. The fork is demonstrably alive and tracking upstream framework releases — Symfony 8 support landed as a dedicated, promptly merged contribution from a named maintainer. That is worth weighting against the low adoption numbers. The bundle remains small and MIT-licensed, so vendoring or an in-house fork stays tractable, which is the real mitigation for adoption risk. Still assign explicit ownership of the Stripe API version pin and a quarterly review of upstream commits — this release changes nothing on the payment-behavior side, which is where deprecations will actually reach you. Track payum/stripe directly for Stripe-side deprecations.
Support. Unchanged. No vendor SLA, no paid support tier, community issues only. Escalation for production payment failures lands on your team. For a revenue-critical path this is acceptable only if the team has Stripe operational experience and a documented runbook; otherwise it is a material gap. Note also that this release is a single-contributor change — review it before adopting, and do not read a patch bump as evidence of a broader testing or QA investment.
Scaling. Unchanged. Stripe Checkout offloads PCI and 3DS entirely, so the hot path is a redirect plus two server calls, and scaling is not a throughput concern. The concern is data: token and payment records accumulate and need a retention policy, and webhook processing needs a queue with retry and dead-letter handling to absorb Stripe retry storms.
Failure modes. Unchanged — the release introduces no new failure surface, and equally mitigates none of the existing ones. The realistic set remains: webhook loss or duplicate delivery producing double capture or missed fulfillment; abandoned Checkout Sessions leaving orphaned pending payments; session expiry arriving mid-flow; currency or amount mismatch between your order and the session; refunds initiated in the Stripe Dashboard going unrecorded locally; configuration drift between Stripe Dashboard settings and bundle/session parameters; and now, a version-matrix drift risk where an environment lags on Symfony/PHP and cannot take 3.0.x. Each needs an explicit detection and reconciliation path — a scheduled job comparing local state to Stripe is not optional.
Ramp-up. Unchanged. Payum's mental model (gateways, actions, requests, tokens, capture vs. authorize) is a genuine ramp for engineers fluent in Laravel or plain Stripe. Estimate one to two weeks before a mid-level engineer is productive and longer before they can debug action-level behavior. If the team has Symfony exposure, halve that. A Symfony 8 support bump does not shorten this curve — it expands who can install the package, not who can understand it. Factor this into any timeline that assumes the bundle "just works."
How can I help you explore Laravel packages today?