arnedesmedt / soap-client
通用目的 SoapClient 库
资助包维护!
Open Collective
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-simplexml: *
- arnedesmedt/client-mock: ~0.1
- arnedesmedt/json-immutable-objects: ~0.1
- azjezz/psl: ^2.1
- laminas/laminas-code: ^4.8.0
- php-soap/engine: ^2.7
- php-soap/ext-soap-engine: ^1.4
- php-soap/psr18-transport: ^1.3
- php-soap/wsdl-reader: ~0.6
- psr/event-dispatcher: ^1.0
- psr/log: ^1.0 || ^2.0 || ^3.0
- symfony/console: ~5.4 || ~6.0 || ~7.0
- symfony/event-dispatcher: ~5.4 || ~6.0 || ~7.0
- symfony/filesystem: ~5.4 || ~6.0 || ~7.0
- symfony/validator: ~5.4 || ~6.0 || ~7.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.5.0
- nyholm/psr7: ^1.5
- php-http/vcr-plugin: ^1.2
- php-parallel-lint/php-parallel-lint: ^1.3
- phpro/grumphp-shim: ^2.3
- phpspec/phpspec: ~7.2
- phpspec/prophecy-phpunit: ^2.0.1
- phpstan/phpstan: ^1.10.15
- phpunit/phpunit: ~9.5
- squizlabs/php_codesniffer: ^3.7.1
- dev-main
- 3.3.1
- 3.3.0
- 3.2.8
- 3.2.7
- 3.2.6
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.0
- 3.0.0-alpha1
- 2.7.0
- 2.6.1
- 2.6.0
- 2.5.8
- 2.5.7
- 2.5.6
- 2.5.5
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.16
- 2.4.15
- 2.4.14
- 2.4.13
- 2.4.12
- 2.4.11
- 2.4.10
- 2.4.9
- 2.4.8
- 2.4.7
- 2.4.6
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- v2.2.1
- v2.2.0
- v2.1.0
- 2.0.19
- 2.0.18
- 2.0.17
- 2.0.16
- 2.0.15
- 2.0.14
- 2.0.13
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- v2.0.0
- v1.7.4
- v1.7.3
- v1.7.2
- v1.7.1
- v1.7.0
- v1.6.0
- v1.5.0
- v1.4.1
- v1.4.0
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.5
- v1.0.4
- v1.0.3
- 1.0.2
- v1.0.1
- v1.0.0
- 0.7.11
- 0.7.10
- 0.7.9
- 0.7.8
- 0.7.7
- 0.7.6
- 0.7.5
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.1
- 0.6.0
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.0
- v0.3.1
- v0.3.0
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- 0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-master
- dev-patch-1
This package is auto-updated.
Last update: 2024-09-24 12:23:40 UTC
README
通用PHP SOAP客户端
厌倦了构建糟糕的SOAP实现?此包旨在帮助您解决PHP中一些常见的SOAP集成痛点。其目标是让SOAP集成再次变得有趣!
演示
想要帮忙吗?💚
想要了解更多关于此项目未来的信息?查看我们即将要工作的下一个大型项目列表。
先决条件
您可以选择要使用的HTTP客户端。此包期望存在某些PSR实现以便安装
- PSR-7:
psr/http-message-implementation
如nyholm/psr7
或guzzlehttp/psr7
- PSR-17:
psr/http-factory-implementation
如nyholm/psr7
或guzzlehttp/psr7
- PSR-18:
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
您可以根据下一章的手动安装页面自定义生成的代码。
启动您的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 调用,您也可以在测试用例中使用自定义的 Transport
或 Caller
。测试您的 SOAP 客户端将非常快速且无错误,无需第三方集成端进行任何错误。
最后但并非最不重要的是,我们希望使您配置 SoapClient 更加容易。这就是为什么我们包括了一个生成的 ClientFactory,您可以在其中配置您的自定义客户端。您希望在开发和生产期间使用其他设置?没问题!放松一下,让工厂处理您的客户端初始化。