phpro/soap-client

一个通用的SoapClient库

资助包维护!
Open Collective

4.0.0-alpha1 2024-06-12 08:09 UTC

README

Build status Installs Packagist

通用的PHP SOAP客户端

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

演示

Soap Client demo

想要帮忙?💚

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

先决条件

你可以选择你想要使用的HTTP客户端。此包需要某些PSR实现才能安装

  • PSR-6: 如 psr/cache-implementationsymfony/cachecache/*-adapter
  • PSR-7: 如 nyholm/psr7guzzlehttp/psr7psr/http-message-implementation
  • PSR-17: 如 nyholm/psr7guzzlehttp/psr7psr/http-factory-implementation
  • PSR-18: 如 symfony/http-clientguzzlehttp/guzzlepsr/http-client-implementation

示例

$ 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与数组和标准类以及其他标量类型混合使用。在现代OOP世界中,这不是一个好的做法,因为

  • 它使您的代码难以测试。
  • 它破坏了代码补全
  • 难以跟踪响应和请求对象的更改。
  • 结果内容永远不会明确。

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

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

此包将强制您将SoapClient封装到自己的客户端中。您可以选择仅公开您需要的方法。对于开发人员来说,您的客户端中有什么,如何工作以及返回什么总是清晰的。我们还为您提供了一个基客户端,您可以使用一些常用的方法进行调试、认证和事件系统。

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

创建一个优秀的OO 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,您可以在其中配置您的自定义客户端。您在开发和生产期间需要其他设置?没问题!坐下来,让工厂处理您的客户端初始化。