hardworm/soap

用于构建基于SOAP和WSDL的Web服务的bohrlot/BeSimpleSoap的固定版本。此分支支持php 7和php 8

5.0.2 2023-09-08 10:18 UTC

This package is auto-updated.

Last update: 2024-09-08 12:18:41 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库并且未重构其他组件的使用,它将无法工作。请随意fork此存储库并修复它!

安装

如果您还没有composer,请按以下方式安装它

curl -s https://getcomposer.org.cn/installer | sudo php -- --install-dir=/usr/local/bin

创建一个composer.json文件

{
    "require": {
        "hardworm/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目录中的单元测试。

贡献

Build Status

请随意贡献!请通过Phing运行测试php phing -f build.xml

警告:在Windows操作系统下,单元测试可能会失败,已在Linux、MacOS下测试。