PHP SOAPCall输入为空

时间:2019-05-06 13:15:33

标签: php web-services soap-client

我遇到以下错误:

  

致命错误:未捕获的SoapFault异常:[s:Client]服务   由于验证错误,操作Pickup_Cancel失败:输入为空

这是我的代码:

MyClass("myA") { /* _ -> */ /* A -> */
   "myCalculatedB" to "C"
}

1 个答案:

答案 0 :(得分:2)

您未问到的问题可能是:用单引号(')替换反引号(`)

-编辑。那不是问题。

是这种情况。 SOAP可能很难走。我的经验是使用良好的soap类或仅使用非wsdl模式。在文档中阅读以下内容:https://www.php.net/manual/en/soapclient.soapcall.php

所以不要这样做:

$return = $soapClient->functionName($data);

但这是

$return = $soapClient->__SoapCall('functionName', $data);

还要掌握服务器的需求,将WSDL URL加载到SoapUI https://www.soapui.org/之类的客户端(免费)中。这样,您可以检查SoapServer是否正常工作以及如何通过调用来处理它。

在您的情况下,WSDL指出:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:pos="http://schemas.datacontract.org/2004/07/PostaWebClient">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Pickup_Cancel>
         <!--Optional:-->
         <tem:CLIENTINFO>
            <!--Optional:-->
            <pos:CodeStation>asd</pos:CodeStation>
            <!--Optional:-->
            <pos:Password>asd</pos:Password>
            <!--Optional:-->
            <pos:ShipperAccount>asd</pos:ShipperAccount>
            <!--Optional:-->
            <pos:UserName>asd</pos:UserName>
         </tem:CLIENTINFO>
         <!--Optional:-->
         <tem:PickupNumber>asd</tem:PickupNumber>
         <!--Optional:-->
         <tem:Reason>asd</tem:Reason>
      </tem:Pickup_Cancel>
   </soapenv:Body>
</soapenv:Envelope>

哪个翻译成以下PHP代码:

$client = new SoapClient("https://etrack.postaplus.net/APIService/PostaWebClient.svc?singleWsdl");

$params = [
    'Pickup_Cancel' => [
        'CLIENTINFO' => [
            'Password' => 'sss',
            'ShipperAccount' => 'acc',
            'UserName' => 'acc',
            'CodeStation' => '',
        ],
        'PickupNumber' => '',
        'Reason' => '',
    ],
];

$client->__SoapCall("Pickup_Cancel", $params);

查看数组如何与WSDL xml格式匹配?

这还应该为您提供继续进行所需的反馈。如果没有,也许是时候得到“真正的”帮助了:)Goodluck。