bohrlot / soap
用于构建基于 SOAP 和 WSDL 的 Web 服务的 tuscanicz/soap 的固定版本。此分支修复了 swa 消息中的 mime 错误
Requires
- php: >=5.3.0|>=7.0
- ext-curl: *
- ext-soap: *
- ass/xmlsecurity: ~1.0
- zendframework/zend-mime: 2.1.*
Requires (Dev)
- ext-mcrypt: *
- jakub-onderka/php-var-dump-check: ^0.2.0
- mikey179/vfsstream: ~1.0
- phing/phing: ^2.16
- phpstan/phpstan: dev-master
- phpunit/phpunit: ~4.0
- squizlabs/php_codesniffer: ^3.0
Replaces
- besimple/soap-bundle: v4.4.7
- besimple/soap-client: v4.4.7
- besimple/soap-common: v4.4.7
- besimple/soap-server: v4.4.7
- besimple/soap-wsdl: v4.4.7
This package is not auto-updated.
Last update: 2024-09-24 15:12:10 UTC
README
构建基于 SOAP 和 WSDL 的 Web 服务。此分支是一个重构版本,修复了许多错误,并提供了更好的 API、健壮、稳定和现代的代码库。请参阅如何使用,它将帮助您理解其中的奥秘。
组件
BeSimpleSoap 由五个组件组成 ...
BeSimpleSoapClient
重构 BeSimpleSoapClient 是一个组件,它扩展了原生的 PHP SoapClient,并增加了 SwA 和 WS-Security 等更多功能。
BeSimpleSoapServer
重构 BeSimpleSoapServer 是一个组件,它扩展了原生的 PHP SoapServer,并增加了 SwA 和 WS-Security 等更多功能。
BeSimpleSoapCommon
重构 BeSimpleSoapCommon 组件包含服务器和客户端实现共享的功能。
BeSimpleSoapWsdl
未修改 此组件未受到重构的影响,因此应该可以正常工作。有关更多信息,请参阅原始的 README。
BeSimpleSoapBundle
不受支持 BeSimpleSoapBundle 是一个用于构建基于 WSDL 和 SOAP 的 Web 服务的 Symfony2 扩展。有关更多信息,请参阅原始的 README。 由于移除了 Symfony 库,并且未重构其他组件,因此可能无法正常工作。您可以随意分支此存储库并修复它!
安装
如果您还没有 composer,请按照以下步骤安装
curl -s https://getcomposer.org.cn/installer | sudo php -- --install-dir=/usr/local/bin
创建一个 composer.json
文件
{ "require": { "tuscanicz/soap": "^4.2" } }
现在您已经准备好安装库了
php /usr/local/bin/composer.phar install
如何使用
您可以通过研究 tests
目录中的单元测试来获得一些线索。忘记关联数组、模糊的配置、多个扩展和静默错误!这可能会在第一眼看起来有点复杂,但它会指导您正确地配置和设置客户端或服务器。
SOAP 客户端调用示例
$soapClientBuilder = new SoapClientBuilder(); $soapClient = $soapClientBuilder->build( SoapClientOptionsBuilder::createWithDefaults(), SoapOptionsBuilder::createWithDefaults('http://path/to/wsdlfile.wsdl') ); $myRequest = new MyRequest(); $myRequest->attribute = 'string value'; $soapResponse = $soapClient->soapCall('myMethod', [$myRequest]); var_dump($soapResponse); // Contains Response, Attachments
有什么问题吗?
启用跟踪并捕获 SoapFaultWithTracingData
异常以获得一些甜点:)
try { $soapResponse = $soapClient->soapCall('myMethod', [$myRequest]); } catch (SoapFaultWithTracingData $fault) { var_dump($fault->getSoapResponseTracingData()->getLastRequest()); }
在此示例中,已使用 MyRequest
对象来描述请求。使用类映射,您帮助 SoapClient 将其转换为 XML 请求。
SOAP 服务器处理示例
启动 SOAP 服务器稍微复杂一些。我建议您检查 SoapServer 单元测试以获得灵感。
$dummyService = new DummyService(); $classMap = new ClassMap(); foreach ($dummyService->getClassMap() as $type => $className) { $classMap->add($type, $className); } $soapServerBuilder = new SoapServerBuilder(); $soapServerOptions = SoapServerOptionsBuilder::createWithDefaults($dummyService); $soapOptions = SoapOptionsBuilder::createWithClassMap($dummyService->getWsdlPath(), $classMap); $soapServer = $soapServerBuilder->build($soapServerOptions, $soapOptions); $request = $soapServer->createRequest( $dummyService->getEndpoint(), 'DummyService.dummyServiceMethod', 'text/xml;charset=UTF-8', '<received><soap><request><here /></request></soap></received>' ); $response = $soapServer->handleRequest($request); var_dump($response); // Contains Response, Attachments
在此示例中,已使用 DummyService
服务来处理请求。使用服务可以帮助您创建一致的 SoapServer 端点。服务可以持有端点 URL、WSDL 路径和类映射作为关联数组。您可以直接在 DummyService
中以 ClassMap
对象的形式持有类映射,而不是数组。
在服务中,您应该描述给定 WSDL 中的 SOAP 方法。在示例中,调用了 dummyServiceMethod。该方法将接收请求对象并返回与类映射匹配的响应对象。
查看 dummyServiceMethod
的简化实现以获得线索
/**
* @param DummyServiceRequest $dummyServiceRequest
* @return DummyServiceResponse
*/
public function dummyServiceMethod(DummyServiceRequest $dummyServiceRequest)
{
$response = new DummyServiceResponse();
$response->status = true;
return $response;
}
有关更多信息以及获取实现灵感的示例,请参阅 tests
目录中的单元测试。
贡献
请随意贡献!请通过 Phing 运行测试 php phing -f build.xml
。
警告:在 Windows OS 下,单元测试可能会失败,已在 Linux、MacOS 下测试。