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

Payline Bundle Laravel Package

lolautruche/payline-bundle

A Symfony bundle that integrates the Payline payment gateway into your application, helping you configure and use Payline services through Symfony’s service container and configuration. It simplifies payment integration for Symfony projects.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — unchanged; the headline risk is still a framework mismatch. lolautruche/payline-bundle is a Symfony bundle, not a Laravel package. Its value is Symfony-specific glue: a Bundle class, a DependencyInjection\Extension for config, service definitions, and a controller/listener for the payment return URL. Laravel does not execute Symfony bundles; there is no registerBundles(), no compiler-pass pipeline, no Configuration tree. v3.0.4 changes none of this. The genuinely portable asset remains the transitive dependency on Monext's official payline/payline-sdk, which is plain PHP and Laravel-consumable. Practically: treat this repository as reference implementation, not as an installable dependency.

Integration feasibility — moderate, unchanged. The glue surface is small (config tree, a service factory wrapping Payline\Payline, a webhook/return route). A competent Laravel engineer can reproduce the equivalent as a service provider, a config file, and a CSRF-exempt controller in roughly 150–300 LOC. Forcing the bundle in (pulling symfony/dependency-injection, symfony/config, bootstrapping a container inside Laravel) is technically possible and strategically wrong.

Technical risk — high, but the risk profile has shifted at the margin. The v3.0.4 release notes read in full: "Update PHP version support." That is the entire signal. Assess it honestly:

  • What it does fix. The prior assessment's staleness argument rested on a last release date of 2021-04-12 and an assumed PHP ceiling somewhere in the 7.x/8.0 range. A patch release that adjusts the PHP version constraint means the package is not frozen, and that our "does not install on PHP 8.2/8.3" assumption must be re-tested rather than asserted. Key question #4 is now answerable by reading composer.json rather than by inference.
  • What it does not fix — and this is the substance. The notes say nothing about Symfony component constraints, nothing about the Payline API generation, nothing about EMV 3DS v2 fields, nothing about ext-soap. The two risks that actually gate a build decision — PSD2/3DS v2 compliance and SOAP-vs-REST API generation — are entirely untouched. A PHP version bump does not make a 3DSv1-era wrapper compliant with SCA.
  • Version numbering is itself a flag. Shipping a patch at v3.0.4 implies a v3.0.0 major exists that we have not reviewed, and the PHP-support change may well have landed there rather than in this patch. We are assessing a patch on top of an unexamined major. Do not treat "v3.0.4" as evidence of a mature v3 line until the v3.0.0 changelog is read.
  • A single patch release is not a maintenance commitment. One commit does not reverse 15 stars, 0 dependents, score 1.36, a single maintainer, and no issue history to mine for edge cases. It reduces the "abandoned" probability slightly; it does not create a support relationship.
  • Ambiguity in "update PHP version support." This could mean a raised floor (dropping PHP 7.x — harmless to us), a widened ceiling (PHP 8.3/8.4 now allowed — useful), or both. It could equally be a floor-raise with no ceiling change, leaving 8.4 still excluded. Must be read from composer.json, not the changelog line.
  • Silent-failure surface — unchanged. Payment plumbing fails ambiguously (timeout after a successful capture). A maintained wrapper would give defensive tooling here; this release adds none.

Key questions to resolve before committing:

  1. What PHP range does v3.0.4's composer.json actually declare — floor raised, ceiling widened, or both — and does it reach PHP 8.3/8.4?
  2. Did any Symfony component constraints move in v3.0.0–v3.0.4? If they still cap at ^4.4 || ^5.x, the dependency conflict with Laravel 11/12's symfony/* requirements is unresolved and disqualifying regardless of PHP support.
  3. What is in the v3.0.0 changelog? We are reviewing a patch atop an unreviewed major.
  4. Which Payline API generation are we integrating — SOAP doWebPayment or REST v4 with bearer tokens — and does the pinned SDK version support it?
  5. Does the flow carry EMV 3DS v2 fields (version, challengeIndicator, threeDSRequestorID), and who owns the SCA-exemption logic? v3.0.4 gives no evidence either way; this remains the top gating item.
  6. Does the bundle/SDK expose getTransactionDetails / getPaymentDetails for reconciliation, or only initiation?
  7. How is the return URL authenticated — signature verification, or must we re-query Payline to trust the payload?
  8. Which Payline contract numbers (merchant_id + per-method contract) do we hold, and do they cover the methods product wants?
  9. What is our idempotency key strategy against doWebPayment retries to avoid double charges?
  10. Is there an internal French-entity constraint driving Payline (versus Stripe/Adyen), and is that constraint durable for 3+ years?

Integration Approach

Stack fit. Consume payline/payline-sdk directly. Wrap it in: config/payline.php (merchant ID, access key, contract numbers, environment, timeout), a PaylineServiceProvider binding a singleton client, a PaylineGateway interface with a concrete adapter, a PaylineReturnController (withoutMiddleware(VerifyCsrfToken::class)), and queued jobs for reconciliation and refunds. Keep the domain layer PSP-agnostic so a later swap to Stripe/Adyen isn't a rewrite — that abstraction is the real deliverable here.

Migration path. Do not composer require lolautruche/payline-bundle. Instead: (1) vendor the config keys and endpoint/environment logic by reading the bundle source as documentation; (2) re-implement the service wiring natively; (3) port the return-URL handling into a Laravel controller with explicit response codes; (4) add an Order/Payment state machine owned by our code, with Payline as an external system of record for settlement only. If a proof-of-concept is needed fast, install the bundle — now pinned at v3.0.4 rather than a 2021 snapshot — in a throwaway Symfony skeleton to observe the real request/response shapes against the sandbox, then discard it. The newer release makes this throwaway exercise slightly easier to stand up.

Compatibility. Target PHP 8.2/8.3, Laravel 11/12. The PHP half of this is now plausibly satisfiable and must be verified from v3.0.4's composer.json rather than assumed. The Symfony half is the remaining blocker: Laravel 11/12 pull symfony/console/symfony/http-foundation at ^7.x, and if the bundle still declares ^4.4 || ^5.x the resolver will refuse — that alone disqualifies it, and v3.0.4's notes do not claim otherwise. Verify payline-sdk's own PHP constraint independently of the bundle's. Confirm ext-soap is present in the container base image and in CI.

Sequencing. 0. Read the v3.0.0→v3.0.4 changelogs and composer.json; record the actual PHP and Symfony constraint ranges. (New step — cheap, and it either closes key question #1/#2 or confirms the bundle is out.)

  1. Sandbox credentials + contract numbers; smoke-test initiation outside the app.
  2. Service provider, config, gateway adapter, feature tests against a mocked client.
  3. Payment initiation + return URL, in the sandbox, end to end.
  4. Server-to-server notification endpoint, idempotent and verifying via API re-query.
  5. 3DS v2 challenge flow and exemption configuration.
  6. Refunds, partial captures, and the reconciliation job.
  7. Observability (structured logs with transactionID, alerting on failure rate) and a PSP-outage runbook.

Note that none of steps 1–7 change because of v3.0.4 — which is itself the finding: the release does not shorten the integration path, it only removes one preliminary blocker.

Operational Impact

Maintenance. The "abandoned" assumption needs softening to "minimally maintained, single-maintainer, no SLA" — v3.0.4 demonstrates the maintainer is still reachable and still touching the PHP constraint. That is a meaningful reduction in the probability of a hard fork being forced on us, and it is the strongest argument this release provides. It does not create a support relationship, does not imply API-version tracking, and does not imply 3DS v2 readiness. The maintenance line item stands: quarterly review of payline-sdk releases and Payline API changelogs, a dependency-bot policy that will not auto-merge payment packages, and a budgeted contingency for full re-integration if Monext deprecates the API generation we pick. Add one thing: because the package now demonstrably ships without warning, pin the exact version and review diffs before any bump — an unreviewed patch on a payment path is not a low-risk change.

Support. Unchanged. No usable community, no vendor relationship for the bundle, Payline/Monext will not debug third-party Symfony glue. Escalation is internal only; need at least two engineers who understand the flow — a single-owner payment integration is a bus-factor incident waiting to happen. French-language PSP documentation still raises support cost for a non-French-reading team.

Scaling. Unchanged. Payment calls are synchronous outbound HTTP/SOAP on the checkout critical path; set aggressive connect/read timeouts (5–10s) and never call inside a DB transaction or a request that also holds a lock. The notification endpoint must be horizontally scalable, idempotent (dedupe on transactionID), and fast — acknowledge and enqueue, don't process inline. Reconciliation should be a scheduled job, not a user-triggered one. Volume is unlikely to be the constraint; latency and PSP-side rate limits will be.

Failure modes to design for explicitly:

  • Ambiguous timeout after authorization — always re-query transaction status before retrying; never blind-retry doWebPayment.
  • Webhook spoofing or replay — do not trust the payload; verify with an authenticated API call, and reject stale timestamps.
  • Missing ext-soap in a scaled runtime — fails only in the environment you didn't test.
  • 3DS challenge abandonment — orders stuck in pending; needs a sweeper.
  • Currency/precision errors — Payline expects integer minor units; float rounding here produces real money discrepancies.
  • Contract/permission mismatch — a payment method enabled in code but not provisioned on the merchant account fails only in production traffic.
  • Refund window expiry — refunds rejected post-settlement without an alternate flow.
  • Unreviewed patch adoption — v3.0.4 proves the package ships changes with one-line changelogs; a silent constraint change on a payment dependency is its own failure class. Pin, diff, and test against sandbox before bumping.

Ramp-up. One mid/senior Laravel engineer with payments exposure: 3–5 days to a sandbox end-to-end flow, 2–3 weeks to production-ready including reconciliation, 3DS v2, and hardening. Add a week if the team has no French-language coverage for Monext documentation. Add a half-day up front for the v3.0.0→v3.0.4 changelog and constraint review. The recommendation is unchanged in direction, marginally improved in confidence: approve the PSP if there is a business reason (French/EU merchant acquiring, existing Monext relationship), still reject the bundle — PHP support was never the binding constraint, 3DS v2 and Symfony constraints are — and fund a native payline-sdk integration behind a PSP-agnostic abstraction layer. Re-open the bundle decision only if a future release explicitly claims 3DS v2 support and Symfony 6/7 compatibility, which would signal a maintainer actively tracking the ecosystem rather than patching a constraint.

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.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
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