如何构建正确的数据结构以进行 SOAP 调用?

How to build the right data structure in order to do a SOAP call?

我需要对网络服务进行 SOAP 调用,但我似乎无法获得正确的数据结构。我什么都试过了,但似乎没有什么是正确的。

我需要在 PHP 中重建以下结构:

<StartWorkflowAndGetResultRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ID_Workflowdefinition xmlns="http://innosolv.ch/webservices/">4003</ID_Workflowdefinition>
    <WorkflowParameterValues xmlns="http://innosolv.ch/webservices/">
        <WorkflowParameterValue>
            <ParameterName>ID_Subjekt</ParameterName>
            <ParameterValue>'.$_SESSION["login-user"].'</ParameterValue>
        </WorkflowParameterValue>
    </WorkflowParameterValues>
    <EntityId xsi:nil="true" xmlns="http://innosolv.ch/webservices/" />
    <EntityId2 xsi:nil="true" xmlns="http://innosolv.ch/webservices/" />
    <KommunikationTemplates xmlns="http://innosolv.ch/webservices/">
        <KommunikationTemplate Identification="3ecc6ab0-f5f7-41d5-b4a6-eea9c7f019f2">
            <Nummer xmlns="Kommunikation_PQ">+41 71 888 88 88</Nummer>
            <ID_Kommunikation xmlns="Kommunikation_PQ">4068</ID_Kommunikation>
        </KommunikationTemplate>
    </KommunikationTemplates>
    <ResultFieldNames xmlns="http://innosolv.ch/webservices/">
        <string>Success</string>
        <string>ErrorMessage</string>
    </ResultFieldNames>
</StartWorkflowAndGetResultRequest>

我的尝试:

$params = array(
    "ID_Workflowdefinition" => 4003,
    "WorkflowParameterValues" => array(
        array(
            "ParameterName" => "ID_Subjekt",
            "ParameterValue" => $_SESSION["login-user"]
        )
    ),
    "EntityId" => null,
    "EntityId2" => null,
    "KommunikationTemplates" => array(
        array(
            "Nummer" => $phone,
            "ID_Kommunikation" => 4068
        )
    ),
    "ResultFieldNames" => array(
        "Success",
        "Failure"
        )
    );      

这是我从网络服务得到的错误响应:

<b>Fatal error</b>:  Uncaught SoapFault exception: [s:Client] Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.<br/>

有多种方法可以使用 SoapClient 创建请求,其中之一是使用类映射选项。 official documentation 中没有记录,但您可以在评论中找到一些示例。

如果您的服务有 WSDL,则可以使用 wsdlToPhp 库从 Web 服务 wsld 生成您需要的所有 类、实体和示例。