ricorocks-digital-agency/soap
A Laravel SOAP client with an expressive, HTTP-client-like API. Build SOAP clients, send requests, inspect responses, and fake SOAP calls in tests for fast, reliable integration testing.
Architecture fit. ricorocks/soap is a thin, Laravel-native SOAP client: it wraps PHP's ext-soap SoapClient behind a fluent, HTTP-client-style API (Soap::to($wsdl)->call(...)), a facade and service provider, a hook system (BeforeSending, ResponseReceived, ResponseReceived, SoapCall-style lifecycle points), and first-class test doubles (Soap::fake(), Soap::assertSent()). It sits cleanly in a gateway/service-layer pattern — consumers depend on an injected client, not on WSDL plumbing — and adds almost no framework coupling beyond the container and the facade. For a team already on Laravel this is a low-ceremony fit; for anything requiring WS-Security, MTOM attachments, or strict XSD code generation it is thinner than phpro/soap-client and should be evaluated against that alternative.
Integration feasibility. Install is a single Composer require plus ensuring ext-soap is compiled into every runtime image (not merely present in php.ini on a dev box). No custom transport, no Guzzle handler conflicts, no queue or cache dependencies. The only real gating constraint introduced by 4.0.0 is the framework matrix.
Technical risk. 4.0.0 is a breaking release by constraint, not by API: it adds Laravel 13 support and removes Laravel 11 support, with no listed feature or behavioural changes. Two consequences for planning:
^3.0 vs ^4.0) rather than floated.Secondary risks: single-agency maintainership (mitigated somewhat by a new contribution from a well-known Laravel community maintainer — a positive maintainership signal, but one PR is not a bus-factor fix); and a narrow abstraction that leaves XSD/namespace/WSDL complexity with the integrating developer.
Key questions.
ext-soap requirement, or is the diff purely composer.json constraints?Stack fit. Laravel 12/13 application, PHP 8.2+, ext-soap enabled in the base image, package pinned at ^4.0. The package rides on Laravel's HTTP client conventions, so timeout, retry, and middleware idioms carry over — no new operational concept for the team to learn at the transport layer.
Migration path. From 3.0.0 → 4.0.0 the code migration should be a no-op; the platform migration is the work. Sequence it as a coupled framework upgrade rather than an isolated dependency bump:
^4.0, run the suite, ship. Low risk.Compatibility. Before committing, run composer why-not ricorocks/soap ^4.0 to see exactly which packages (or the root laravel/framework constraint) block resolution — this is the single highest-value pre-flight check and surfaces transitive Laravel 11 pins immediately. Also confirm the WSDL/sandbox endpoints we depend on are reachable from CI, since the test suite will exercise fakes rather than the real service.
Sequencing.
Soap::fake() assertion in the codebase and test suite.^4.0, resolve constraints, run unit + contract tests.composer.lock as a documented rollback point.Maintenance. Small dependency surface, but the upgrade cadence is now dictated by Laravel majors — budget one planned bump per framework release cycle. Watch 3.x actively while any service remains on it; once Laravel 11 security support ends, 3.x becomes an unpatched branch and an audit finding.
Support. Open-source, agency-maintained, GitHub issues as the only escalation path. Acceptable for internal integrations; if a SOAP endpoint is revenue-critical, plan to vendor/fork the package or wrap it behind our own adapter interface so it can be swapped, and note the fork obligation in the runbook.
Scaling. The client is synchronous and blocking; throughput is bounded by the upstream SOAP service and its WSDL, not by this package. Push long-running or batch SOAP calls onto queues, set explicit per-call timeouts, and use Laravel's retry semantics deliberately — blind retries against a non-idempotent SOAP operation is the classic incident here. Avoid resolving the client eagerly at container boot, which turns a WSDL fetch into a startup dependency.
Failure modes to instrument.
ext-soap absent from a rebuilt container image → fatal at first call, not at deploy. Add an image-level extension assertion in CI.SoapFault at call time; cache the WSDL locally where the service is stable.composer show ricorocks/soap in the deploy pipeline.Ramp-up. The API surface is small and idiomatic — a Laravel developer is productive in an afternoon. The real onboarding cost is SOAP domain knowledge (namespaces, XSD strictness, WS-Security, fault codes), which this package deliberately does not abstract. Offset it with a short internal runbook, one worked example per endpoint family, and a fake-based test harness as the default way to develop against these integrations without touching a live service.
How can I help you explore Laravel packages today?