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

时间:2019-06-25 09:43:17

标签: php soap wsdl

我需要对Web服务进行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/>

1 个答案:

答案 0 :(得分:0)

有多种使用SoapClient创建请求的方法,其中一种是使用classmap选项。 official documentation中没有记录,但是您可以在注释中找到一些示例。

如果您的服务具有WSDL,则有一个wsdlToPhp库,该库可生成Web服务wsld中所需的所有类,实体和示例。