arnedesmedt/soap-client

通用目的 SoapClient 库

3.3.1 2024-05-24 11:37 UTC

README

Build status Installs Packagist

通用PHP SOAP客户端

厌倦了构建糟糕的SOAP实现?此包旨在帮助您解决PHP中一些常见的SOAP集成痛点。其目标是让SOAP集成再次变得有趣!

演示

Soap Client demo

想要帮忙吗?💚

想要了解更多关于此项目未来的信息?查看我们即将要工作的下一个大型项目列表。

先决条件

您可以选择要使用的HTTP客户端。此包期望存在某些PSR实现以便安装

  • PSR-7: psr/http-message-implementationnyholm/psr7guzzlehttp/psr7
  • PSR-17: psr/http-factory-implementationnyholm/psr7guzzlehttp/psr7
  • PSR-18: psr/http-client-implementationsymfony/http-clientguzzlehttp/guzzle

示例

$ composer require symfony/http-client nyholm/psr7

安装

$ composer require phpro/soap-client

骨架向导

由于生活太短暂,没有时间阅读文档,我们添加了一个骨架向导,它可以让您在极短的时间内与SOAP服务器进行通信!您需要做的就是

./vendor/bin/soap-client wizard

您可以根据下一章的手动安装页面自定义生成的代码。

启动您的SOAP集成

  1. 创建您自己的SOAP客户端。
  2. 基于SOAP类型生成PHP类。
  3. 生成类映射
  4. 生成您自己的SOAP客户端。
  5. 生成客户端工厂。
  6. 使用您的SOAP客户端。
  7. 测试您的SOAP客户端。

高级配置

这是一个基于 php-soap 的客户端实现。对于更高级的配置,您可以在php-soap包内的文档中查看。

自定义代码生成

已知问题

为什么制作这个SOAP客户端

默认情况下,SoapClient与数组、stdClasses和其他标量类型的混合一起工作。在现代面向对象的世界里,这并不是一个好的做法,因为

  • 它使得您的代码难以测试。
  • 它破坏了代码完成。
  • 难以追踪响应和请求对象的更改。
  • 结果的内容从不明确。

为了解决上述问题,此包将强制您使用值对象来处理请求和响应。我们知道维护这些值对象可能会很麻烦。不用担心!有一些命令行工具可以帮助您生成良好的基础。因为 SoapClient 需要一个 WSDL 到 PHP 类的类映射,所以还有一个类映射生成器可用。这将节省您大量时间!通过添加 SOAP 类型转换器,可以将特定 SOAP 类型的值从/到 PHP 类型进行转换。该包包含一些基本的日期和日期时间转换器。更重要的是,创建自己的转换器非常简单。

另一个问题是,原生的 SoapClient 使用了许多魔法方法。调试这些魔法方法很困难,因此没有代码补全。SOAP 和实现方法都在同一个对象上。

此包将强制您将 SoapClient 包装到您自己的客户端中。您可以选择仅公开您需要的函数。对于开发人员来说,始终很清楚您的客户端包含什么、如何工作以及返回什么。我们甚至提供了一些基客户端,供您使用一些常用的调试、认证和事件系统方法。

在许多 SOAP 集成中,日志记录、缓存和 Soap 调用都在同一个方法中。这使得您的代码难以阅读,并且依赖于其他类/包。

创建一个优秀的面向对象的 SOAP 客户端意味着您需要编写大量代码。这可能是一项繁琐的任务,但可以自动化。这就是为什么我们添加了工具来自动从 WSDL 内部的 XSD 架构中生成 SOAP 对象。甚至可以指定您自己的代码生成规则和代码组装器,或使用我们许多内置的类。

保持代码干净很重要。因此,我们为您添加了 Soap 客户端的事件监听器。您可以在 SOAP 流的每个重要步骤中进行挂钩。这样,您就可以通过事件订阅者添加日志记录、验证和错误处理。是不是很酷?!

实现 SOAP 扩展真的很痛苦。它迫使您重写内置 SOAP 客户端的核心方法。如果您曾经必须实现 WSA 或 WSSE 在 SOAP 中,您知道核心中有什么问题。因此,我们使您能够轻松扩展我们的 SOAP 客户端。您可以指定想要使用的数据传输处理器,例如 Guzzle。根据所选处理器,您可以轻松添加对 SOAP 扩展或通过 HTTP 中间件进行高级认证的支持。

处理 ext-soap 不适合所有开发者。有一些需要了解的棘手问题。因此,我们使您能够使用您想要的任何驱动程序。默认情况下,我们仍将提供 ext-soap 驱动程序,但它完全是可选的。如果要将用户空间 SoapClient 实现包装在我们的驱动接口中,您可以使用它。

测试 web 服务很难!此包提供了一些测试 SOAP 服务的各种方法。由于传输基于 HTTP,您可以使用 php-vcr 实现。如果您不想进行实际的 HTTP 调用,您也可以在测试用例中使用自定义的 TransportCaller。测试您的 SOAP 客户端将非常快速且无错误,无需第三方集成端进行任何错误。

最后但并非最不重要的是,我们希望使您配置 SoapClient 更加容易。这就是为什么我们包括了一个生成的 ClientFactory,您可以在其中配置您的自定义客户端。您希望在开发和生产期间使用其他设置?没问题!放松一下,让工厂处理您的客户端初始化。