burti/besimple-soap-common
A shared foundation for BeSimple SOAP client and server packages, supplying common classes, WSDL utilities, and type definitions. Simplifies building and consuming SOAP services in PHP and Laravel applications by keeping reusable SOAP components consistent across integrations.
Architecture fit. burti/besimple-soap-common is not a Laravel package — it is a shared library extracted from the BeSimple SOAP stack, a Symfony2-era (2011–2015) ecosystem of bundles for building and consuming SOAP services. It provides common SOAP type classes and WSDL/XSD primitives consumed by sibling packages (besimple-soap-client, besimple-soap-server), not standalone functionality. There is no service provider, facade, config file, or publishable asset, so it does not participate in Laravel's container, config, or package-discovery conventions. It would be a transitive dependency glued on rather than an integrated component.
Integration feasibility. Low. The namespace is BeSimple\SoapCommon, and the library assumes the surrounding BeSimpleSoap packages exist. It targets PHP 5.x/7.x and Symfony 2 components; modern Laravel (10/11/12) ships Symfony 6/7 components, so Composer resolution will either fail outright or require --ignore-platform-reqs and a conflict-ridden lockfile. There is no Laravel-facing adapter anywhere in the ecosystem, and the parent project has been effectively abandoned for the better part of a decade.
Technical risk. High. Specific concerns:
E_DEPRECATED-as-error and static analysis.Key questions for the sponsor:
ext-soap available in our runtime? If yes, phpro/soap-client or a thin SoapClient wrapper is a materially better path.The "opportunity: 6.59" score should be discounted heavily against an adoption signal of zero — the opportunity is hypothetical, the risk is concrete.
Stack fit. Poor as a direct dependency. The realistic architectural role is "reference implementation for SOAP type mapping," not "library we ship." If a specific WSDL genuinely requires the BeSimple type model, the correct pattern is a bounded adapter: define a SoapGateway interface in our domain layer, implement it with a BeSimple-backed driver, and never let BeSimple\SoapCommon\* types escape that namespace. All controller, job, and service code depends on the interface and on plain DTOs.
Migration path. Two viable routes, in order of preference:
phpro/soap-client (actively maintained, PHP 8-compatible, Laravel-friendly) or the built-in SoapClient plus a hand-rolled WSDL-to-DTO mapping. This library then serves only as a reference for type definitions.internal/soap-common), apply PHP 8 fixes and XXE/SSRF hardening, and pin the fork. Do not depend on Packagist for it — the upstream can vanish or be hijacked.Compatibility. Expect to patch for PHP 8: each(), curly-brace string offsets, implicit nullable parameters, and missing return types. Budget for a static-analysis pass (PHPStan at a low level) to enumerate the breakage before committing. If the patch surface balloons past a few files, escalate to route (1) or isolate the SOAP calls in a separate sidecar service with its own pinned runtime.
Sequencing.
SoapGateway interface and DTOs from the WSDL before touching implementation.Maintenance. We become the de facto maintainer. There is no upstream to file issues against, no security mailing list, and no release notes to read. Every PHP minor version upgrade becomes a manual compatibility audit. Treat the fork as first-party code with a named owner and a documented patch log.
Support. 0 stars and 0 dependents means no Stack Overflow corpus, no GitHub issue history to search, and no third party to escalate to. Debugging is entirely first-principles. For a TPM this translates directly into an elevated mean-time-to-resolution on any SOAP incident and a hard dependency on one or two engineers who have read the source.
Scaling. SOAP is synchronous and request/response; the library adds WSDL parsing cost on top. Mitigations: cache parsed WSDL aggressively (APCu/Redis with a TTL tied to WSDL version), pool connections where the transport allows, and push slow partner endpoints behind queued jobs rather than handling them in the request cycle. The library itself does no caching for you.
Failure modes to instrument:
Ramp-up. Documentation is thin-to-nonexistent and the Symfony2 idioms it assumes are unfamiliar to most engineers now. Plan for a senior engineer to spend several days reading source before being productive, and document the adapter's behavior as they go. The team should assume this knowledge is single-owner and mitigate with a written runbook, recorded WSDL fixtures, and a second engineer paired through the spike.
Bottom line for the decision log: the package is a reference artifact, not a dependency. Approve a one-week spike to confirm that; default to a maintained SOAP client with a bounded adapter, and hold the fork in reserve only if a specific WSDL forces it.
How can I help you explore Laravel packages today?