厌倦了构建蹩脚的 SOAP 实现吗?该包旨在帮助您解决 PHP 中一些常见的 SOAP 集成难题。它的目标是让与 SOAP 的集成再次变得有趣!
想要了解有关该项目未来的更多信息吗?查看我们将要开展的下一个大型项目的列表。
您可以选择要使用的 HTTP 客户端。该软件包需要一些 PSR 实现才能安装:
psr/cache-implementation
如symfony/cache
或cache/*-adapter
psr/http-message-implementation
如nyholm/psr7
或guzzlehttp/psr7
psr/http-factory-implementation
如nyholm/psr7
或guzzlehttp/psr7
psr/http-client-implementation
如symfony/http-client
或guzzlehttp/guzzle
例子:
$ composer require symfony/http-client nyholm/psr7
$ composer require phpro/soap-client
由于生命太短,无法阅读文档,因此我们添加了一个脚手架向导,它将让您立即与 SOAP 服务器进行通信!您需要做的就是:
./vendor/bin/soap-client wizard
您可以根据下一章中的手动安装页面自定义生成的代码。
这是 php-soap 之上的客户端实现。对于更高级的配置,您可以查看 php-soap 包内的文档。
Rules
Assemblers
生成代码默认情况下,SoapClient 混合使用数组、stdClass 和其他标量类型。在现代 OOP 世界中这不是一个好的实践,因为:
为了解决上述问题,这个包将强制您使用值对象来处理请求和响应。我们知道维护这些值对象可能是一项繁重的工作。不用担心!有一些可用的命令行工具可以帮助您打下良好的基础。由于 SoapClient 需要 WSDL 到 PHP 类的类映射,因此还有一个可用的类映射生成器。这肯定会节省您很多时间!通过添加 SOAP 类型转换器,可以将特定 SOAP 类型的值从 PHP 类型转换为 PHP 类型。该软件包包含一些用于日期和日期时间的基本转换器。最重要的是,创建自己的变压器非常容易。
另一个问题是本机 SoapClient 使用许多神奇方法。很难调试这些魔术方法,因此没有代码完成。 SOAP 和实现方法都在同一个对象上。
该包将强制您将 SoapClient 包装到您自己的客户端中。您可以选择仅公开您需要的方法。开发人员始终清楚您的客户端中有什么、它如何工作以及它返回什么。我们甚至提供了一个基础客户端供您使用一些常用的调试、身份验证和事件系统方法。
在许多 SOAP 集成中,日志记录、缓存和 Soap 调用都在同一方法中。这使得您的代码难以阅读并且依赖于其他类/包。
创建一个出色的 OO SOAP 客户端意味着您必须创建大量代码。这可能是一项繁琐的任务,但可以自动化。这就是为什么我们添加了工具来从 WSDL 内的 XSD 方案自动生成 SOAP 对象。甚至可以指定您自己的代码生成规则和代码汇编器或使用我们的许多内置类之一。
保持代码整洁很重要。因此,我们向您的 Soap 客户端添加了一个事件侦听器。您可以参与 SOAP 流程的每个重要步骤。这样就可以通过事件订阅者添加日志记录、验证和错误处理。很酷吧?!
实现 SOAP 扩展确实很痛苦。它强制您覆盖内置 SOAP 客户端的核心方法。如果您曾经必须在 SOAP 中实现 WSA 或 WSSE,您就会知道核心存在问题。因此,我们使您可以轻松扩展我们的 SOAP 客户端。您可以指定要使用的数据传输处理程序,例如 Guzzle。根据所选的处理程序,您可以通过 HTTP 中间件轻松添加对 SOAP 扩展或高级身份验证的支持。
处理 ext-soap 并不适合所有开发人员。您需要了解一些令人讨厌的怪癖。因此,我们使您可以使用您想要使用的任何驱动程序。默认情况下,我们仍然会提供 ext-soap 驱动程序,但它是完全可选的。如果将任何用户态 SoapClient 实现包装在我们自己的驱动程序接口中,则可以使用它。
测试网络服务很难!该包提供了测试 SOAP 服务的一些不同方法。由于传输是基于 HTTP 的,因此您可以使用php-vcr
实现。如果您不想进行实际的 HTTP 调用,您还可以在测试用例中使用自定义Transport
或Caller
。测试您的 SOAP 客户端将非常快,并且在集成的第 3 方方面不会出现任何错误。
最后但并非最不重要的一点是,我们希望让您能够轻松配置 SoapClient。这就是为什么我们包含了一个生成的 ClientFactory,您可以在其中配置自定义客户端。您想要在开发和生产过程中进行一些其他设置吗?没问题!坐下来让工厂处理您的客户端初始化。