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.
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:
composer.json rather than by inference.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.composer.json, not the changelog line.Key questions to resolve before committing:
composer.json actually declare — floor raised, ceiling widened, or both — and does it reach PHP 8.3/8.4?^4.4 || ^5.x, the dependency conflict with Laravel 11/12's symfony/* requirements is unresolved and disqualifying regardless of PHP support.doWebPayment or REST v4 with bearer tokens — and does the pinned SDK version support it?version, challengeIndicator, threeDSRequestorID), and who owns the SCA-exemption logic? v3.0.4 gives no evidence either way; this remains the top gating item.getTransactionDetails / getPaymentDetails for reconciliation, or only initiation?merchant_id + per-method contract) do we hold, and do they cover the methods product wants?doWebPayment retries to avoid double charges?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.)
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.
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:
doWebPayment.ext-soap in a scaled runtime — fails only in the environment you didn't test.pending; needs a sweeper.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.
How can I help you explore Laravel packages today?