kitano/payment-bundle
Symfony bundle that brings payment processing into your app, wrapping multiple payment gateways behind a shared service interface so you can configure providers, create payments, and handle callbacks and status updates with minimal boilerplate.
PaymentGateway contract bound to Omnipay or the acquirer's official SDK. Do not budget it as an install.Consider it when all of the following hold:
PaymentInstruction with amount, currency, state, and a free-form extended_data blob — to validate your own domain model before committing.Look elsewhere — or rather, borrow the pattern and build — when:
league/omnipay for the generic-flow-plus-drivers pattern, or laravel/cashier (Stripe/Paddle) if the acquirer permits.Executive summary. This is a small, generic Symfony payment-flow bundle — not a complete payment product, and not a Laravel package. It is architecturally sound in concept (one flow, swappable provider adapters) and weak as an asset (7 stars, 0 dependents, no maintainer, no release cadence, no security advisories). Recommendation: use it as a design reference, reject it as a dependency. We should adopt its pattern — a persisted payment instruction, an explicit state machine, provider work isolated behind an interface, a fake gateway driving the whole test suite — and implement it ourselves on a maintained foundation. Do not put an unmaintained, payment-path component in the critical path of a product that moves money.
Engineering summary. The bundle only orchestrates; it requires a separate provider bundle (Sips, Fake, or your own) to do anything. It assumes Symfony's DI container, bundle registration, and event dispatcher, and persists via Doctrine. Nothing in the repo targets illuminate/*, so a Laravel adoption means writing a service provider, bridging Symfony's dispatcher to Laravel's, and resolving persistence against Eloquent — days to weeks of glue on an unmaintained base, in exactly the code path where bugs cost money. The realistic plan: (1) document the reference model, (2) define a first-party PaymentGateway contract, (3) implement against Omnipay or the acquirer SDK, (4) ship behind a fake adapter with callback-replay and idempotency tests, (5) build reconciliation before production traffic. Gate any contrary decision on a time-boxed spike that exercises the Fake gateway end-to-end — and treat failure as the expected outcome.
The risks to put in front of the risk owner. Partial state after a gateway timeout (authorized but not recorded); missing idempotency keys enabling double capture; replayed callbacks with no dedupe; internal state drifting from the gateway ledger with no reconciliation job; silent exceptions from pre-modern error-handling conventions. Each is fixable with engineering discipline — none is fixed by an unmaintained library.
How can I help you explore Laravel packages today?