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

Laravel Paytabs Laravel Package

paytabscom/laravel_paytabs

Laravel PayTabs provides a straightforward integration for the PayTabs payment gateway in Laravel applications. It handles payment requests, redirects, and callback responses through configurable credentials, letting you add online card payments quickly.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged and still good: the package is a thin Laravel wrapper over PayTabs' hosted payment page flow — config file for profile ID / server key / region endpoint, a facade-or-service binding, routes plus controller for redirect and return, optional transaction model and migrations, and a callback endpoint. V1.10.0 adds Morocco and Qatar to the region endpoint map, which is exactly the kind of change this architecture absorbs cheaply: an additive config/constant entry, no new coupling, no change to the request/response shape we depend on. The core architectural property still holds — card data never touches our servers (hosted redirect, SAQ A scope), the right default for a MENA-focused gateway.

Integration feasibility. Technically feasible, still not adoptable as-is. The dominant fact remains the archived repository: no security response process, no compatibility roadmap for newer Laravel/PHP, no commitment to fix things if PayTabs revises its API contract. V1.10.0 is a data point that the vendor still occasionally touches the code, but a terse point release adding two endpoints is not a maintenance commitment — it is a config addition, most likely driven by a single merchant request. 24 stars, 0 dependents still means no community validation and no third party absorbing the upgrade risk for us. "Fork and own" remains realistic given the small code volume, and this release slightly lowers the cost of that fork because the region map we would inherit is now broader.

Technical risk.

  • Abandonment risk (high, marginally revised): archived, but no longer provably dormant. Treat as "best-effort, no SLA" rather than "dead." Do not let one point release change the plan — assume no upstream fixes on any timeline we care about.
  • Payments correctness risk (high): unchanged. Webhook/callback handling is where money bugs live, and this release says nothing about signature verification, idempotency, duplicate-callback handling, or amount/currency reconciliation. Verify line by line.
  • Coverage gaps (medium-high): refunds, voids, tokenization/recurring, partial captures, and 3DS/Mada/Apple Pay specifics are still likely absent and ours to build. V1.10.0 widens regional reach without indicating any widening of functional coverage.
  • Region-specific correctness (new, medium): adding MA and QA endpoints raises new questions the release notes do not answer — local payment method support (e.g. Moroccan domestic cards/CMI rails, Qatari debit/NAPS), currency handling for MAD and QAR, 3DS2 requirements per market, and whether these endpoints require additional request fields the wrapper does not send.
  • Version drift (medium): Laravel major-version compatibility, PHP 8.3+, and PayTabs API version pinning remain unverified and unfixable upstream.
  • Secrets handling (medium): server key storage, per-region configuration, and key rotation are still left to the integrator — and now span more regions, which typically means more key/profile permutations to manage.

Key questions for the vendor/team.

  1. Does V1.10.0 signal a resumption of maintenance, or is this a one-off merchant-driven config addition? Is the repository still formally archived, and is there a support channel with SLAs either way?
  2. Are Morocco and Qatar in scope for launch, or is this release merely permissive? If in scope, which local payment methods, currencies (MAD/QAR), and 3DS2 requirements apply in each?
  3. Is the V1.10.0 change strictly additive config/constants, or does it alter endpoint selection logic, return/callback URL construction, or required request fields? (Diff the release rather than trusting the one-line note.)
  4. Does the callback handler verify the returned signature against the server key, and is the flow idempotent on repeated callbacks?
  5. Which PayTabs regions and payment methods (Mada, KNET, 3DS2, Apple Pay, recurring) must be in scope at launch, and which does the package demonstrably support?
  6. What is our fallback if PayTabs changes the request/response schema — do we have a direct commercial relationship and a named integration contact, per region?
  7. Is the browser return-URL flow treated as authoritative anywhere in the code? It must not be.

Integration Approach

Stack fit. Good on the surface and unchanged: pure Laravel conventions, no exotic dependencies, no queue or cache requirements. It assumes a relational database only if we enable its transaction model, which we should replace with our own payments table so the schema matches our ledger and audit requirements. The added MA/QA endpoints fit the same pattern — configuration, not new machinery.

Recommended path — reference, not dependency. Still the recommendation, and the new release does not change it. Treat the package as a reference implementation and build a thin first-party client against PayTabs' REST API (~200–400 lines: build the payment request payload, POST, redirect, handle return, verify and process callback). V1.10.0 makes this slightly cheaper: it documents the endpoint values for MA and QA, which we can lift into our own region config without inheriting the dependency. If timeline pressure forces reuse, fork, vendor into the repo, pin the version, and strip the package manager dependency — never composer require an archived payments library.

Decoupling regardless of path. Put PayTabs behind an internal PaymentGateway contract with initiate, handleCallback, refund, and status. This matters more now, not less: if Morocco and Qatar are on the roadmap, the contract should carry region/currency as first-class parameters rather than relying on a global config value. That is the difference between adding a market in days and a quarter-long migration later — and between a one-week gateway swap and an expensive one if a second acquirer is needed for local rails.

Migration and sequencing.

  1. Spike (1–3 days): sandbox credentials in the launch region — if MA or QA is the target, spike there specifically, since that is where V1.10.0 is least proven. Prove create-payment, redirect, return, and callback end-to-end with real signature verification.
  2. Release diff: confirm V1.10.0 is additive-only before inheriting it; check endpoint-selection logic, config keys, and any changed defaults.
  3. Contract and schema: define our payments and payment_events tables (idempotency key, gateway reference, amount, currency, status, region, raw payload) before writing integration code. Include region and currency from day one — retrofitting multi-currency into a payments ledger is painful.
  4. Callback hardening: signature verification, replay protection, amount/currency match against our record, and a reconciliation job that polls PayTabs for any payment stuck in pending beyond N minutes — per region.
  5. Refunds and operations: build refund/void paths and an admin view for support; almost certainly not in the package, and refund semantics may differ by market.
  6. Rollout: feature-flagged, single region, low-value transactions first, with manual reconciliation before enabling the full catalog.

Compatibility checks before committing: Laravel version, PHP version, Guzzle/HTTP client version, region endpoint values for MA/QA against current PayTabs documentation, and whether the package's published config/migrations collide with our conventions.

Operational Impact

Maintenance. The real cost is still ownership, not adoption. An archived package means every future Laravel upgrade, PHP upgrade, TLS change, or PayTabs API revision becomes our ticket. Budget roughly 2–5 engineer-days per year for a forked thin client, plus unplanned work when PayTabs changes behavior. V1.10.0 demonstrates the other side of that ledger: when the vendor does ship, it ships with a one-line note and no changelog detail, so we absorb the verification work regardless. Each additional region increases the number of endpoint/key permutations under our operational control.

Support. Still the weakest dimension. A point release is not evidence of a maintained changelog, security response process, or SLA. Our support path must remain the PayTabs commercial/merchant relationship and their API documentation, not the repository. Before adding Morocco or Qatar, confirm a named technical contact for each market — regional acquiring and local payment method issues are rarely resolved from public docs alone. Without one, incident resolution depends on documentation and guesswork.

Scaling. Low concern technically. The hosted-page redirect model means our infrastructure handles only a payment-intent POST and a callback, both trivially horizontally scalable; adding regions does not change that. Callback endpoints remain internet-facing and unauthenticated by design: rate limit them, cap payload size, and acknowledge fast (enqueue, return 200 immediately) so retry storms during peaks cannot cascade. Multi-region adds a routing dimension — callbacks must be attributed to the correct region and credentials, so keep region in the callback path or resolvable from the payload.

Failure modes to design for explicitly.

  • Callback never arrives (network, misconfigured URL, PayTabs outage) — payments sit pending forever. Mitigation: scheduled reconciliation poller per region, alert on payments pending beyond threshold.
  • Duplicate and out-of-order callbacks — double-fulfillment or status regression. Mitigation: idempotency on gateway reference, monotonic state machine, never trust the browser return URL for status.
  • Amount or currency mismatch between our record and the callback — silent revenue loss, and more likely once MAD/QAR sit alongside existing currencies. Mitigation: hard-fail and alert.
  • Region/endpoint misconfiguration (elevated by this release) — valid credentials against the wrong region produce confusing failures that look like auth errors; the more regions in the config, the easier this is to get wrong. Mitigation: validate region/currency pairing at boot and in tests.
  • Unverified local-rail behaviour — MA/QA endpoint support does not guarantee the local payment methods, 3DS flows, or settlement semantics we need. Mitigation: certifiy each launch region end-to-end in sandbox and with a live low-value transaction before enabling the catalog.
  • Secret rotation and leakage — server keys in config/env; rotation should not require a deploy, and should be possible per region.
  • Silent failure inside the wrapper — small packages often swallow HTTP errors or return loosely typed arrays. Structured logging of every request/response (excluding secrets) from day one.

Ramp-up. Low for a competent Laravel engineer to read and understand the package; moderate for the domain. MENA payment specifics — region endpoints, Mada and KNET behavior, and now Moroccan and Qatari local methods, currency handling, 3DS2 step-up, Arabic/French hosted-page configuration, and settlement/refund semantics — are where the real learning curve sits, and none of it is in this repository. V1.10.0 does not reduce that curve; it enlarges the surface it applies to.

Bottom line. V1.10.0 is a small, additive, low-risk change that extends regional coverage to Morocco and Qatar and is worth incorporating into our reference blueprint — but it does not change the structural verdict. The package remains archived, unvalidated (0 dependents, 24 stars), and on the revenue-critical path; a point release is not a maintenance commitment. Recommend using it as a starting blueprint for a small, owned integration layer behind an internal gateway contract that treats region and currency as first-class parameters, with signed-callback verification, reconciliation, and region certification as launch blockers rather than follow-ups. Decision needed from the business: confirm which of MA/QA is actually in launch scope, and confirm PayTabs' maintenance and support commitment per market before we invest in a fork.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource