econea/nusoap
NuSOAP is a pure-PHP library for creating and consuming SOAP 1.1 web services with WSDL 1.1 and HTTP 1.0/1.1 support. No PHP extensions required. Install via Composer and call methods on the client.
Release Delta (v0.9.20 → v0.10.0) — this release is breaking for PHP < 8.2 and materially changes the maintenance profile. The previous assessment's core conclusion (SOAP is a deliberate, contained liability) holds, but three things shift: the supported-platform floor, the encoding capability for legacy endpoints, and the upstream quality signals (first real test suite + QA toolchain).
contributte/nusoap v0.10.0 remains a NuSOAP fork targeting SOAP-based integrations with legacy systems (banks, government APIs, enterprise ERP/CRM). The architectural position is unchanged:
Require PHP >= 8.2 (a1e2167) drops PHP 5.6–8.1. This is the single decision-relevant change: it silently removes any Laravel service still on PHP 8.0/8.1 from the upgrade path.charencoding (#144): getter/setter for request/response character encoding. This is an architecture-relevant improvement for legacy counterparts using ISO-8859-1 / Windows-1252, and typically lets teams delete hand-rolled utf8_encode/utf8_decode shims at the integration boundary.curl_close() deprecation, non-canonical cast deprecations, and wsdl::$schemaTargetNamespace (PHP 8.2+) fixed. Reduces runtime log noise but does not change design.| Laravel | PHP Requirement | v0.10.0 Viable? |
|---|---|---|
| 9.x | 8.0+ | No (unless runtime is 8.2+) |
| 10.x | 8.1+ | Conditional — only where the runtime is 8.2+ |
| 11.x / 12.x | 8.2+ | Yes |
soap, dom, xml). But Composer will now hard-fail on PHP < 8.2 at install time — a deterministic, pre-deploy failure rather than a runtime surprise.charencoding):
$client = new \nusoap_client('https://legacy-api.example.com/soap', 'wsdl');
$client->setCharEncoding('ISO-8859-1'); // v0.10.0 — replaces manual transcoding shims
try {
$response = $client->call('LegacyMethod', ['param1' => 'value']);
if ($client->fault) {
throw new \RuntimeException($client->faultstring);
}
} catch (\nusoap_fault $fault) {
throw new \RuntimeException("SOAP Fault: {$fault->faultstring}");
}
| Risk Area | Severity | Mitigation Strategy | Update for v0.10.0 |
|---|---|---|---|
| SOAP Deprecation | High | Document migration path to REST/gRPC. | No change. |
| PHP Floor (>= 8.2) | High | Inventory runtimes before upgrading; pin ^0.9.20 where PHP 8.1 persists. |
New breaking constraint. |
| WS-Security | Medium | Use nusoap built-in security or phpseclib. |
No change; new tests do not appear to cover WS-Security paths — verify. |
| Character Encoding | Medium → Low | Explicitly set charencoding per counterparty. |
New control removes a common source of silent data corruption. |
| PHP Version Quirks | Medium → Low | Test on PHP 8.2–8.5. | Deprecation fixes for 8.2+/8.5 reduce noise. |
| Performance | Low | Cache responses. | No change. |
| Upstream Governance | Low–Medium | Review diffs before adopting; treat AI-authored commits as normal PR review. | New: several commits authored by @claude / @Copilot; PHPStan and CodeSniffer CI are configured to allow failure. |
| Maintenance Burden | High → Medium | Fork only if abandoned. | Downgraded: first real test suite + QA toolchain materially reduces fork pressure. |
^0.10.0 and must stay pinned at ^0.9.20 — decide whether that's a temporary pin or an upgrade trigger.charencoding is the reason to take this upgrade — quantify which integrations currently rely on hand-rolled transcoding.soap, dom, xml).// config/app.php
'bindings' => [
\App\Services\LegacySoapService::class => function ($app) {
$client = new \nusoap_client('https://api.example.com/soap', 'wsdl');
$client->setCharEncoding(config('services.legacy_soap.charencoding', 'UTF-8'));
return new \App\Services\LegacySoapService($client);
},
],
fruitcake/laravel-soap or custom REST proxies remain viable if SOAP is avoidable.charencoding round-trip against a real non-UTF-8 payload.charencoding via config, normalizes faults to Laravel exceptions.^0.10.0 below 8.2 — fail fast, not at runtime.charencoding: new public API; safe additive change, but behavior changes if you set it — audit downstream string handling and DB column collations before enabling.$HTTP_SERVER_VARS global and the undefined $tt_ns variable are gone. Both are dead-code cleanups with negligible regression surface, but worth a smoke test on any heavily customized fork.charencoding config.^0.9.20 pinned in a branch — it remains installable on PHP 8.0/8.1."contributte/nusoap": "^0.10.0"."^0.9.20" and treat this as a tracked technical-debt item, not a silent pin.contributte/tester), E2E server tests, PHPStan/CodeSniffer config, a Makefile QA toolchain, Codecov reporting, and CI on PHP 8.2–8.5. This is the first release where the "we may need to fork" contingency can reasonably be deferred.charencoding config key for future developers.
/**
* @throws \RuntimeException If the SOAP call faults or returns an invalid payload.
*/
public function callLegacySoap(): mixed
charencoding is enabled for a high-volume endpoint.| Failure Mode | Impact | Mitigation |
|---|---|---|
| Composer resolution failure (PHP < 8.2) | High (blocks deploy, but deterministic and caught in CI) | Audit runtimes first; pin ^0.9.20 where 8.1 persists. |
Encoding mismatch after setting charencoding |
High (silent data corruption) | Round-trip test with real payloads; verify DB collation and downstream string handling. |
| SOAP Provider Downtime | High (blocking calls) | Retries with exponential backoff. |
| PHP 8.5 deprecation regressions | Low | Baseline log volume pre/post upgrade. |
| WS-Security Misconfiguration | High (auth failures) | Use built-in security; add tests (likely uncovered upstream). |
| Upstream abandonment | Medium | Test suite now makes forking tractable. |
charencoding config key, and the pin/upgrade decision for any service still on 8.1."v0.10.0 requires PHP >= 8.2. Services on 8.1 must remain on
^0.9.20. For legacy endpoints using non-UTF-8 charsets, setservices.legacy_soap.charencoding."
How can I help you explore Laravel packages today?