tomatophp/filament-payments
Filament Payment Manager lets you manage payments inside FilamentPHP apps with multi-gateway integration. Includes payments list, views, filters, gates, gate options, actions, a payment page, and drivers like Stripe, PayPal, Paymob, Tap, and more.
Architecture fit. tomatophp/filament-payments is a FilamentPHP panel plugin, not a payments platform. That framing drives the go/no-go: it is an accelerator for the admin-side of payments (transaction list, status filters, gateway configuration, a "Pay" table action, a hosted payment page) and for initiation via a single facade (FilamentPayments::pay(PaymentRequest::...) → redirect URL). It ships Eloquent models, migrations, Filament resources, a public Livewire payment page (/pay/{trx}), and gateway drivers (StripeV3, PayPal, Paymob, Tap, Myfatoorah, Plisio, Cryptomus). It presumes your back office already runs Filament; if it does not, this package is irrelevant and should be rejected outright. The important architectural property is favorable: all supported gateways are hosted-redirect flows, so card data never touches your servers and PCI scope stays minimal. The important architectural gap is equally clear: nothing in the README evidences a ledger, reconciliation engine, idempotency model, refund/partial-capture workflow, or webhook verification contract. A TPM should treat this as "payments admin UI + initiation wrapper," and budget separately for the money-correctness layer.
Integration feasibility. High for a greenfield Filament app, moderate for an existing one. It is composer require + filament-payments:install + one ->plugin() line, but the hidden prerequisites are real: Spatie Media Library migrations must be published and run, and release notes show filament-translations-component became an unlisted hard dependency (v1.0.14). Gateway credentials are configured through the Filament UI, i.e. secrets live in the database — that needs an encryption-cast, audit, and rotation story before it reaches production. Migration files are publishable and have been edited by community PRs (v1.0.20 changed the payments table), so you should review and own the schema rather than trusting the published stub to match upstream.
Technical risk. Concentrated, and mostly sustainability rather than capability:
3x1io) with a handful of drive-by contributors. There is no third-party production signal to cite in a risk review. Mitigation is a fork-and-own contingency plan and a small internal patch queue.POST cancel) inside a patch-level band. v5.0.1 appears to bump a major version for a homepage URL change. You cannot infer upgrade cost from version numbers — pin exact versions and read every release note.Key questions for the maintainer / spike.
PaymentRequest/driver contract frozen, and what is the supported Filament major-version matrix?Stack fit. Laravel + Filament (Livewire/Alpine/Tailwind) + Spatie Media Library; optional pairing with filament-subscriptions via the afterSubscription hook; filament-translations-component as an implied dependency. Database-agnostic in principle, but validate against your engine (Postgres/MySQL) since migrations have been community-edited. Confirm the Filament major version constraint against your panel before the spike — this is the most common hard stop.
Migration path. Sequence it so no irreversible step happens in production:
composer require tomatophp/filament-payments with an exact pinned version.filament-payments:install, register FilamentPaymentsPlugin::make() in the panel provider.migrate in prod.Compatibility. Two seams to pin: the Filament version (breaks on panel majors) and the gateway driver contract (unstable, see #6 upstream). Anything you wrap — the facade call, the PaymentAction, the public payment page route — should sit behind your own thin service class so a fork or replacement doesn't ripple across feature code.
Sequencing.
filament-payments.links, ops runbook for stuck pending payments.Leverage estimate. Realistic saving is 2–3 engineer-weeks on the payments admin surface (list/view/filter, gate config UX, payment action) — meaningful, not transformative. The gateway work, reconciliation, and money correctness remain yours.
Maintenance. You own the upgrade treadmill. The plugin must track Filament majors, and with a single-maintainer cadence plus breaking changes landing in patch releases, treat every bump as a mini-project: read the changelog, re-review the schema, retest callbacks. Budget ~1–2 engineer-days per Filament major and a standing fork of the repo. Note also that the 2026-10-13 release date in the metadata is inconsistent with a package whose history sits in 2024–2025 — a small data-hygiene flag worth corroborating against Packagist before you rely on release recency as a liveness signal.
Support. GitHub issues only. No vendor, no SLA, no security disclosure policy visible. Escalation path is your own team. For a payments-adjacent component that is a governance finding — document it as accepted risk, or scope the package to non-critical-path flows (internal ops UI) where an outage is survivable.
Scaling. Initiation volume is low and hosted-redirect offloads the heavy lifting to the gateway, so nothing here scales badly. Two watch items: (a) the public payment page is a stateful Livewire route — plan for session affinity or sticky routing if the checkout page sits behind a load balancer, and don't put it behind aggressive caching; (b) payment records share your primary application database, so reporting queries over a growing payments table need indexes and likely a read replica. Throughput risk lives in webhook ingestion and reconciliation jobs, which are outside the package and must be queued, backpressured, and monitored by you.
Failure modes to instrument.
pending indefinitely with no automatic recovery → silent revenue leakage and support tickets. Requires a scheduled reconciliation sweep against gateway APIs.filament-payments.links) → customers clicking a slow-delivered email hit a dead payment page. Tune TTL to your email delivery p99.filament-payments.enforce_owner) → payments tied to a user break for guest/anonymous checkout or admin-initiated "pay by link" flows. Validate against your actual funnel.Ramp-up. Low for a competent Filament developer — the facade and PaymentAction are genuinely ergonomic, and a working Stripe test-mode flow is a half-day. The harder ramp is domain, not API: webhook idempotency, reconciliation, PCI scoping, and refund semantics are not taught by this package, and the README's brevity can create false confidence in exactly those areas. Staff the integration with someone who has shipped a payment flow before, even if they only review.
Recommendation. Adopt as a bounded accelerator for the payments admin surface in an existing Filament back office, pinned and behind a thin abstraction, with reconciliation and webhook verification built in-house. Do not adopt it as your payments platform, your ledger, or in a path where a single-maintainer outage is unacceptable. Re-evaluate — likely toward a fork — at the third gateway.
How can I help you explore Laravel packages today?