renova/soap-client

一个通用的 SoapClient 库

v1.4.1 2020-12-18 13:48 UTC

README

Build status Installs Packagist

通用的 PHP SOAP-client

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

演示

Soap Client demo

安装

$ composer require phpro/soap-client

骨架向导

由于生命太短暂,没有时间去阅读文档,所以我们添加了一个骨架向导,可以帮助你快速与 SOAP 服务器通信!你只需要做以下事情

composer require --dev zendframework/zend-code:^3.1.0
./vendor/bin/soap-client wizard

你可以在下一章的手动安装页面中根据需要自定义生成的代码。

启动你的 SOAP 集成

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

高级配置

自定义代码生成

已知问题

为什么制作这个 soap 客户端

默认情况下,SoapClient 使用数组、stdClasses 和其他标量类型的混合。在现代 OOP 世界中,这并不是一个好的做法,因为

  • 它使你的代码难以测试。
  • 它破坏了代码完成。
  • 难以跟踪响应和请求对象的变化。
  • 结果的内容永远不会明确。

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

另一个问题是,原生的 SoapClient 与许多魔术方法一起工作。这些魔术方法难以调试,因此没有代码完成。SOAP 和实现方法都在同一个对象上。

这个包将强制你将 SoapClient 封装到自己的客户端中。你可以选择只公开你需要的方法。对于开发者来说,你的客户端中的内容、工作方式和返回值总是很清楚。我们甚至提供了一个基 Client,供你使用,其中包含一些常用的调试、身份验证和事件系统方法。

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

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

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

实现SOAP扩展真的非常痛苦。它迫使你重写内置SOAP客户端的核心方法。如果你曾经不得不在SOAP中实现WSA或WSSE,你就会知道核心中有些问题是存在的。因此,我们使你能够轻松扩展我们的SOAP客户端。你可以指定你想使用的数据传输处理器,例如Guzzle。根据所选处理器,你可以轻松添加对SOAP扩展或通过HTTP中间件的高级身份验证的支持。

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

测试Web服务是件困难的事情!这就是为什么这个包与php-vcr完全兼容。测试你的SOAP客户端将会非常快,并且不会在集成第三方时出现任何错误。

最后但同样重要的是,我们想要使配置你的SoapClient变得容易。这就是为什么我们包含了一个生成的ClientFactory,你可以在其中配置你的自定义Client。你想要在开发和生产中设置不同的设置?没问题!坐下来,让工厂处理你的Client初始化。