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

Symfony Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • Supply chain: hosted on Azure DevOps, not GitHub or GitLab. Stars and dependents read as blank/zero — but that is a measurement artifact, not evidence of neglect. Packagist's advisory database and composer audit will not surface CVEs unless the package is registered there. No public issue tracker guarantees, no contributor graph, no release cadence signal.
  • Payment-critical surface: you are trusting an unaudited package with cardholder-adjacent flows. Verify 3-D Secure handling, webhook signature/HMAC verification, idempotency keys on capture/refund, and whether the integration keeps you in PCI SAQ A (hosted/embedded redirect) versus A-EP.
  • Regional lock-in: MyFatoorah is strong across the GCC (KNET, MADA, Visa/Mastercard) and Egypt/Jordan. Acceptable if that is your market; a liability if you need global coverage, since you will be maintaining a second PSP integration anyway.
  • Abandonment: single-vendor repo with no community fork path. If it stalls, you own it.

Key questions.

  1. Is there a framework-agnostic MyFatoorah PHP SDK we can depend on directly, bypassing the bundle?
  2. Supported Symfony/PHP version matrix, and does it conflict with Laravel 10/11's pinned Symfony components (http-client, options-resolver, translation)?
  3. Are amounts handled in smallest currency units, and does it correctly handle 3-decimal currencies (KWD, BHD, OMR)?
  4. Webhook signature verification — present, documented, enforced?
  5. Tokenization / recurring / saved-card support, and refund + partial-refund coverage?
  6. License terms and whether the Azure DevOps repo is truly public-read with issue tracking enabled.

Integration Approach

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.

  1. Spike in MyFatoorah sandbox against the SDK directly — prove pay, webhook, refund end-to-end before writing production code.
  2. Confirm webhook verification and idempotency semantics.
  3. Build the PaymentGateway port and adapter with tests against recorded responses.
  4. Wire into checkout behind a feature flag; keep the existing flow intact.
  5. Add a reconciliation job (scheduled status polling) as a safety net independent of webhooks.
  6. Instrument, then ramp traffic gradually.

Operational Impact

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.

  • Silent misconfiguration — bundle never registered / config never loaded, surfacing as null credentials at runtime. Fail fast at boot.
  • Forged or replayed webhooks if signature verification is absent or optional.
  • Double charge on retry without idempotency on capture.
  • 3-D Secure redirect drop-off — users who never return; needs a status-polling fallback, not just a callback handler.
  • Amount/currency bugs — smallest-unit and 3-decimal handling is the most common source of off-by-1000 incidents in GCC gateways.
  • Webhook loss — reconciliation job is mandatory, not optional.

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.

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.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast