serendipity_hq/bundle-stripe
A Symfony bundle for integrating Stripe payments, offering configuration and services to work with charges, customers, subscriptions, and webhooks via Stripe's PHP SDK. Helps wire Stripe into Symfony applications with less boilerplate.
Architecture fit. The first and most important finding is a framework mismatch: despite the package being filed here under "Laravel/PHP," serendipity_hq/bundle-stripe is a Symfony bundle (Aerendir's wrapper around the Stripe PHP SDK, registered via a Symfony DI extension and configured through config/packages/*.yaml). It is not a Laravel package, has no service provider or facade, and will not auto-discover in a Laravel application. If our target is Laravel, the fit is effectively zero without writing an adapter layer — at which point we are maintaining a bridge to an archived dependency. If our target is a Symfony application, the fit is structurally reasonable: it wraps Stripe's server-side SDK and exposes services for charges, customers, and (per its historical scope) subscriptions/webhooks, which is the shape a Symfony app wants.
Integration feasibility. Low-to-moderate, and gated on two hard blockers. (1) The repository is archived, meaning no upstream fixes, no security patches, and no compatibility work for newer Symfony or Stripe SDK majors. (2) It pins to an era of the Stripe API and Symfony that is likely older than our baseline (Symfony 4/5-era conventions), so Composer resolution will probably conflict with a current symfony/* and stripe/stripe-php constraint set. Practically, integration means vendoring or forking the bundle and patching its dependency constraints, its service definitions (autowiring/public-service defaults changed across Symfony majors), and its Stripe SDK calls (the SDK moved toward immutable StripeClient-based invocation). That is a fork-maintenance commitment, not an install.
Technical risk.
Key questions.
stripe/stripe-php directly or Laravel Cashier.stripe/stripe-php versions are we on, and does the bundle resolve against them at all?Stack fit. Poor as-is. For a Laravel stack: reject. There is no Laravel integration path; the bundle's Symfony DI extension, YAML configuration tree, and event dispatcher assumptions do not map. Use stripe/stripe-php directly behind our own service classes, or Laravel Cashier if subscriptions are the need. For a Symfony stack: conditional fit — acceptable only as a forked, pinned internal dependency, and only if the bundle's feature surface (checkout, customers, webhooks) matches our roadmap without needing Payment Intents work we would have to add ourselves.
Migration path. Treat this as an adoption of source code, not a dependency:
acme/stripe-bundle) and archive the upstream reference in the README.symfony/* and stripe/stripe-php constraints, then fix compile errors — expect service-definition and SDK-call-site churn.Compatibility. Assume breakage on: Symfony 6/7 (public services default, attribute-based config, removed aliases), PHP 8.2+ (typed properties, deprecations in older code), and any recent Stripe SDK major (client instantiation, removed static helpers, API version pinning). Budget for a spike to prove a green container compile before committing to the migration — that spike is the go/no-go gate.
Sequencing.
composer.json; record exactly what breaks.stripe/stripe-php (~200–400 LOC for our likely scope).Given 18 stars, zero dependents, and archived status, my default recommendation is do not adopt; the honest comparison is a small internal Stripe service layer, which we would own either way but without inheriting someone else's abandoned design.
Maintenance. Total. Archiving transfers 100% of upkeep to us: Symfony major upgrades, Stripe SDK majors, PHP version bumps, and security patches. Realistically 1–3 engineer-days per Symfony or Stripe major cycle, plus unbounded time if a Stripe API deprecation lands mid-quarter. This is the dominant cost and should be priced as a permanent tax, not a one-off.
Support. None. No upstream maintainer, no issue triage, no security advisories routed to us. Internal support means naming a single owning team and an on-call path for payment failures — which we need regardless, but here we also absorb framework-level defects. There is no vendor to escalate to and no community forum with meaningful depth.
Scaling. The bundle is a thin SDK wrapper, so throughput scales with the Stripe API and our HTTP client, not with the bundle — no meaningful scaling ceiling. The real scaling concern is organizational: the fork's surface area grows every time a product team patches it locally, and divergent forks are how payment logic rots. Enforce a single fork, single CI, no local overrides.
Failure modes.
composer update breaks the build because the archived bundle's constraints conflict — this typically surfaces at the worst time, mid-release.Ramp-up. Deceptively steep for a small package. A new engineer cannot read upstream docs (there is little), cannot search a live issue tracker, and must reverse-engineer a forked, partly-patched codebase and the Stripe integration semantics at the same time. Estimate 1–2 weeks to first safe change, versus 2–3 days for a clean wrapper over stripe/stripe-php with official Stripe docs. That delta recurs with every new engineer, which is why I would weight ramp-up heavily against adoption even before the security argument.
How can I help you explore Laravel packages today?