myfatoorah/symfony-bundle
Symfony bundle that integrates the MyFatoorah payment gateway into Symfony applications, with configuration, service definitions, and convenient APIs for creating payments, handling callbacks, and managing transactions.
Architecture fit — primary red flag. The package is a Symfony bundle (myfatoorah/symfony-bundle), not a Laravel package. Bundles depend on Symfony's Kernel, DependencyInjection\Extension, Configuration trees, and bundle registration in config/bundles.php. Laravel has none of that: no AbstractBundle/Bundle lifecycle, no prepend()/load() extension hooks, no autoconfiguration tags. Installing it via Composer will pull the code in, but nothing will wire it into Laravel's container. This is not adoptable as-is in a Laravel codebase. The only viable path is to consume the underlying HTTP/SDK layer directly and build a Laravel adapter around it.
Integration feasibility. Depends entirely on whether the bundle exposes a framework-agnostic core (a myfatoorah/* PHP SDK, a client class, or symfony/http-client/Guzzle-based transport) versus having business logic baked into Symfony services and DI parameters. Confirm: Is there a standalone SDK package? Does the bundle use constructor injection with plain value objects, or Symfony-specific types (ParameterBagInterface, RequestStack, HttpFoundation requests)? If the latter, extracting a usable core is real work, not a wrapper.
Technical risk.
composer audit will not surface CVEs unless the package is registered there. No public issue tracker guarantees, no contributor graph, no release cadence signal.Key questions.
http-client, options-resolver, translation)?Stack fit. Do not install the bundle in Laravel. Instead: depend on the core SDK (if published) or vendor the client classes into an internal package, then expose them through a Laravel service provider + config/myfatoorah.php + a facade — or better, no facade at all.
Recommended shape. Introduce a domain port, PaymentGateway (createPayment, confirm, refund, status, verifyWebhook), with MyFatoorahAdapter as the only implementation. This is cheap insurance: it isolates Symfony-vs-Laravel drift, makes a second PSP for non-GCC markets a config change, and lets you swap to a maintained fork without touching checkout code. Keep MyFatoorah request/response DTOs out of controllers and jobs.
Migration path. Greenfield — zero dependents means no prior art, no migration burden, and no battle-tested usage patterns to copy. Pin an exact version (not a caret range). Mirror the repo into an internal Composer registry (Satis or Private Packagist) so an Azure DevOps outage or repo archival cannot break your build. Budget a fork if you need patches.
Compatibility. The main collision risk is transitive Symfony component constraints. Run composer why-not against your Laravel version before committing. Also verify the HTTP client layer honors Laravel's Http client expectations for timeouts — the bundle likely configures its own.
Sequencing.
PaymentGateway port and adapter with tests against recorded responses.status polling) as a safety net independent of webhooks.Maintenance. No visible release cadence, no Packagist download stats, no dependents to piggyback on. Assume low-touch maintenance by the vendor and plan for you to own updates. The adapter layer converts "vendor abandons package" from an incident into a backlog item.
Support. Escalation runs through MyFatoorah's merchant/commercial channel, not a public issue tracker. Open a merchant account and confirm sandbox credentials and technical support SLAs before committing to the integration — gateway onboarding, not code, is usually the critical path.
Scaling. The SDK is almost certainly synchronous HTTP. Do not call it inline in a web request beyond the redirect initiation; push capture/refund/status calls onto queued jobs with explicit timeouts, bounded retries, and idempotency keys. Gateway-side rate limits are undocumented — assume they exist and add a circuit breaker plus a dead-letter queue so a PSP slowdown does not cascade into checkout latency.
Failure modes to design against.
Ramp-up. A Laravel team reading Symfony bundle conventions (DI extensions, semantic config) will spend a day or two orienting, but if you integrate via the SDK directly that cost mostly disappears. The real ramp is domain ramp: sandbox behavior, error code taxonomy, and refund/settlement timing — allocate a sprint for one engineer to own that knowledge and document it.
How can I help you explore Laravel packages today?