kj/payment-stripe-bundle
KJ Payment Stripe Bundle integrates Stripe payments into your PHP application, wrapping payment intents, checkout flows, and webhook handling behind simple configuration so you can accept cards and manage transactions with minimal boilerplate.
stripe/stripe-php dressed in Symfony bundle conventions (DI extension, config tree, YAML service definitions). The real decision it forces is not "which wrapper" but "do we own a wrapper at all, or call the official SDK behind our own interface?" For a Laravel roadmap the answer is effectively pre-decided — this package is a Symfony bundle, not a Laravel package, so adopting it means reimplementing its wiring anyway.ServiceProvider, no Facade, no publishable config/*.php. It cannot be registered by Laravel's container. The decision it informs is "do we standardize payment code on a framework-neutral interface so the wrapper choice stays reversible?"stripe/stripe-php v13+ or Laravel Cashier instead.PaymentGateway interface" — a scoped refactor, not a new-product decision.stripe/stripe-php version, whether webhook signature verification exists, whether any SCA/PaymentIntent flow is implemented, the composer.json PHP/Symfony constraints, license, and test coverage.Look elsewhere if:
stripe/stripe-php with a thin service binding, or Cashier if subscriptions are core.For executives — recommendation: do not adopt. We reviewed kj/payment-stripe-bundle, a third-party wrapper that exposes the Stripe API inside a Symfony bundle. Two facts settle it. First, it is not a Laravel package — it uses Symfony's bundle, DI, and config-tree machinery, none of which our application runs, so it cannot be installed on a modern Laravel stack; the only reusable part is roughly fifty lines of configuration plumbing we would write ourselves. Second, it carries no adoption signal whatsoever: zero stars, zero dependents, no visible maintainer. For revenue-critical code that means we inherit ownership on day one with no upstream to fix anything. The commercial exposure is concrete and quiet: no SCA support (card payments fail in the UK and EU under PSD2, which looks like "customers stopped paying" rather than a bug), no webhook signature verification (false payment confirmations), no idempotency keys (duplicate charges and chargebacks), and credentials likely configured in version-controlled YAML. The wrapper saves maybe a day of setup and costs an unknown amount of remediation later. Standardize on the officially maintained Stripe SDK, which is what this bundle wraps anyway and which carries Stripe's own compatibility and security guarantees.
For engineering — treat it as a reference, not a dependency. If it appears in a legacy Symfony codebase, do not require it; vendor the service classes or, better, extract the intent. Define an internal PaymentGateway interface expressing your domain operations (charge, refund, tokenize, handleWebhook) and implement it against stripe/stripe-php v13+ directly, or Cashier if subscription billing is the core use case. Lock and document a target Stripe API version as an explicit decision rather than a default. If existing code calls the bundle, apply a strangler pattern: put the interface in front of current call sites first, dark-launch the new implementation in Stripe test mode with production-shaped payloads, canary a small share of live volume with reconciliation running against both paths, and decommission the bundle once reconciliation matches for a full billing cycle. Call sites never need to learn the bundle went away.
The one durable decision here is architectural, not vendor-specific: keep payment logic behind our own abstraction so the choice of wrapper — this bundle, Cashier, or raw SDK — stays reversible. Payments are the most expensive layer to rewrite, and this package is a one-way door we should not walk through.
How can I help you explore Laravel packages today?