Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Free Payment Bundle Laravel Package

paymentsuite/free-payment-bundle

Adds a free payment method to PaymentSuite, letting Symfony/PHP e-commerce apps complete zero-total orders without touching a real gateway. Lightweight and easy to configure, it's a handy fallback for testing, promotions, or fully discounted carts.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • This is a Symfony bundle, not a Laravel package — a [READ-ONLY] subtree split of the PaymentSuite/FreePayment component published so Composer can install it outside the monorepo. There is no ServiceProvider, no publishable config, and nothing for Laravel package discovery to find; this is the single most important architectural fact for a Laravel TPM to internalize before scoping any work.
  • Functionally it is a no-op gateway: a payment method that resolves an order to "paid" without any external PSP call. Its real deliverable is not the behavior (trivially reproducible) but the PaymentSuite contract implementation — PaymentMethodInterface, PaymentBridgeInterface, PaymentMethodWrapper, plus the DI service tags that let the payment router discover the method.
  • It drags in the full PaymentSuite runtime model: Symfony DI extension, service tagging, compiler passes, XML/YAML service configuration, and a hard dependency on paymentsuite/payment-core. That is a poor conceptual fit for Laravel's container and pipeline-oriented cashier/gateway ecosystem.
  • Verdict: architecturally appropriate only for a legacy Symfony e-commerce app already running PaymentSuite. For a Laravel codebase it is reference material, not a dependency.

Integration feasibility

  • Symfony path: composer require paymentsuite/free-payment-bundle paymentsuite/payment-core, register in bundles.php, import routing, enable under config/packages/paymentsuite.yaml. Straightforward if versions align.
  • Laravel path: not directly installable. You would be pulling in payment-core and a Symfony HTTP kernel to obtain behavior equivalent to "return success." The cost/benefit is inverted — the same semantics reimplemented natively are roughly 150–300 lines.
  • The genuinely reusable asset is the state-transition and contract semantics — how the method marks an order paid, what events fire, how the wrapper exposes the transaction, and whether it asserts zero amount. Worth reading as a design reference before writing your own.

Technical risk

  • Maturity is the dominant risk. 1 star, 0 dependents, near-zero composite score, last release 2021-01-29. The PaymentSuite ecosystem is largely dormant since the PHP 5/7 and Symfony 2/3/4 era.
  • Version conflict is near-certain on a modern stack. Expect php and symfony/* constraints that block installation on PHP 8.2+/Symfony 6/7 without --ignore-platform-reqs or a fork. This is a kill/continue signal, not a nuisance to work around.
  • Silent success is the critical functional risk. A "free" method that returns success without asserting the payable amount is zero is a direct revenue-bypass vector if it is ever exposed as a selectable checkout option in production. Whether this component performs that assertion must be verified in source, not assumed.
  • Subtree-split packaging: issues and PRs belong upstream; the split is a read-only artifact. Any fix you need, you own forever.
  • The high opportunity score against a near-zero quality score reads as high conceptual value gated by low maturity — not a green light.

Key questions

  1. What are the exact composer.json constraints for php, symfony/*, and paymentsuite/payment-core?
  2. Does the method validate that the order total / payable amount is actually zero, and does it fail closed if not?
  3. What order-state transitions and events does it trigger, and are they idempotent on retry?
  4. Is the method registered as user-selectable at checkout, or restricted to server-side/admin invocation?
  5. Which upstream commit does this split correspond to, and how stale is it relative to payment-core?
  6. Is there any test coverage, and does upstream accept external PRs today?

Integration Approach

Stack fit

  • Symfony 3/4 app already on PaymentSuite: fit, minimal integration surface.
  • Modern Symfony 6/7: poor fit without a maintained fork.
  • Laravel: no fit as a package; high fit as a pattern reference.

Migration path

  • Do not bridge the Symfony bundle into Laravel via a shim. The dependency graph (payment-core, Symfony DI, event dispatcher, HTTP kernel) will cost more than the behavior is worth.
  • Instead, port the semantics: a FreePaymentMethod implementing your existing payment contract, returning a synthetic successful result tagged provider: 'free', guarded by a config flag (PAYMENT_FREE_ENABLED, default false) and a hard server-side abort_unless($order->total()->isZero(), 422) assertion.
  • If already on Symfony + PaymentSuite: install via Composer, register the bundle, configure — no migration, only version reconciliation.

Compatibility

  • Run composer why-not paymentsuite/free-payment-bundle as the first action; it is the cheapest kill/continue signal available.
  • Check whether the split's composer.json pins payment-core to a version whose own constraints conflict with your Symfony minor.
  • Audit the service definitions for anything that auto-registers the method into the checkout payment list by default — that is how a reference package becomes a production incident.

Sequencing

  1. Spike (0.5 day): read the PaymentMethod and PaymentBridge implementations; confirm zero-amount validation and state transitions in source.
  2. Compatibility gate (0.5 day): attempt install on a throwaway branch; record the conflict surface.
  3. Decision gate: if install requires platform-req overrides or a fork, stop and reimplement natively.
  4. If proceeding (Symfony): register bundle → configure → add feature flag defaulting off → contract test in sandbox.
  5. Production hardening: restrict the method to orders with payable amount == 0 server-side; log every invocation with order ID and amount.
  6. If porting (Laravel): implement gateway + tests → wire into checkout → run in parallel with existing methods in staging.

Operational Impact

Maintenance

  • Treat adoption as vendoring code you now own. The read-only split will not deliver patches you can consume, and upstream activity is negligible. Budget a fork, and record the upstream commit SHA in your dependency notes.
  • Every PHP or Symfony major bump will likely require you to patch the fork yourself.

Support

  • Effectively zero community support: 1 star, 0 dependents, no meaningful issue traffic on the split. Institutional knowledge must be documented at integration time; there will be no external answers later.
  • Bus factor is 1 in practice — whoever integrates it becomes the permanent owner.

Scaling

  • Runtime cost is negligible: a no-op gateway with no external I/O will never be a throughput bottleneck.
  • The scaling concern is organizational: it does not scale to a multi-team, multi-gateway payment architecture needing consistent observability, retry, and reconciliation semantics across every method.

Failure modes

  • Revenue bypass (highest severity): method selectable by an end user on a non-zero cart and returning success. Mitigate with a hard server-side amount assertion and checkout-level method allowlisting.
  • Config drift: enabled in production by inheriting staging config; free orders silently processed.
  • State desync: order marked paid with no corresponding settlement record, breaking finance reconciliation and refunds.
  • Composer lock poisoning: --ignore-platform-reqs becomes permanent and masks other version conflicts.
  • Silent failure inversion: success returned where an error is warranted (non-zero amount, already-paid order), with nothing to alert on because there is nothing to alert on.

Ramp-up

  • Code complexity is low: a competent Symfony developer understands the component in under a day; integration is 1–2 days including config and tests.
  • The hidden cost is PaymentSuite domain literacy — DI tags, the payment router, wrapper semantics — which is undocumented here and must be reverse-engineered, adding roughly a day for anyone new to the ecosystem.
  • For a Laravel team, ramp-up on the package is not worth funding; ramp-up on the pattern is a few hours.

Recommendation: Do not adopt as a dependency on a Laravel stack — reimplement a guarded zero-amount payment method against your own contract. On an existing Symfony/PaymentSuite application, adopt only behind a default-off feature flag, after a compatibility spike and an explicit read of the amount-validation path.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums