web服务- PHP Soap复杂数据类型


web services - PHP Soap Complex Data Type?

我正在尝试使用PHP Soap服务,但是我似乎遇到了复杂/抽象类型的麻烦。

这是使用SOAP UI生成的SOAP调用:-

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:lin="http://llu.webservices.opalonline.co.uk/LineCharacteristicsWS">
   <soapenv:Header/>
   <soapenv:Body>
      <lin:GetLineCharacteristics>
         <lin:request>
            <!--Optional:-->
            <lin:UserCredentials>
               <!--Optional:-->
               <!--Optional:-->
               <lin:Username>testUser</lin:Username>
               <lin:Password>testPass</lin:Password><lin:AgentID>1234</lin:AgentID>
            </lin:UserCredentials>
            <lin:RequestDetails xsi:type="lin:TelephoneNumberRequest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <lin:TelephoneNumber>123456789</lin:TelephoneNumber>
            </lin:RequestDetails>
            <lin:UserConsent>Yes</lin:UserConsent>
            <lin:ServiceType>MPF</lin:ServiceType>
         </lin:request>
      </lin:GetLineCharacteristics>
   </soapenv:Body>
</soapenv:Envelope>
下面是我的PHP代码:-
$call = new StdClass();
$call->request =  new StdClass();
$call->request->UserConsent = "Yes";
$call->request->ServiceType = "MPF";
$call->request->UserCredentials =  new StdClass();
$call->request->UserCredentials->Username="testUser";
$call->request->UserCredentials->Password="testPass";
$call->request->UserCredentials->AgentID=1234;

$call->request->RequestDetails = new StdClass();
$call->request->RequestDetails->TelephoneNumber = "123456789";
$url = "https://llu.webservices.opalonline.co.uk/LineCharacteristicsWSV6/LineCharacteristicsWS.asmx?wsdl";
$client = new SoapClient($url, array('trace' => 1, exceptions=> 1,'soap_version' => SOAP_1_1));
$result = $client->GetLineCharacteristics($call);
echo $client->__getLastRequest();
echo $client->__getLastResponse();

当我运行代码时,生成以下错误:-

Fatal error: Uncaught SoapFault exception: [soap:Client] Server was able to read request。在XML文档(2,382)中有一个错误。-->指定的类型为abstract: name='RequestType', namespace='http://llu.webservices.opalonline.co.>uk/linecharcharacteristicsws ',网址:http://llu.webservices.opalonline.co.uk/LineCharacteristicsWS'>。在/用户/jamesormerod/NetBeansProjects/fpdfDev/TestClass.php: 23日

有人能帮忙吗?

为了能够发送具有正确类型和名称空间的格式良好的请求,您必须使用命名为所需元素的类和将元素映射到类的类映射。WsdlToPhp项目可以帮助您生成类和类映射。您可以在wsdltophp.com上使用该项目。

然后,例如,如果您生成名称为LineCharacteristics的包,则可以使用以下示例代码发送请求:

$lineCharacteristicsServiceGet = new LineCharacteristicsServiceGet(); // sample call for LineCharacteristicsServiceGet::GetLineCharacteristics() $details = new LineCharacteristicsStructTelephoneNumberRequest('+3363136363636'); $request = new LineCharacteristicsStructGetLineCharacteristicsRequest($details, LineCharacteristicsEnumUserConsentEnum::VALUE_YES, LineCharacteristicsEnumServiceTypeEnum::VALUE_MPF); $userCredentials = new LineCharacteristicsStructCredentials(11111,'********','********'); $request->setUserCredentials($userCredentials); $characteristics = new LineCharacteristicsStructGetLineCharacteristics($request); $r = $lineCharacteristicsServiceGet->GetLineCharacteristics($characteristics); echo implode("'r'n", array($lineCharacteristicsServiceGet->getLastRequestHeaders(),$lineCharacteristicsServiceGet->getLastRequest(),$lineCharacteristicsServiceGet->getLastResponseHeaders(),$lineCharacteristicsServiceGet->getLastResponse())); if($r) print_r($lineCharacteristicsServiceGet->getResult()); else print_r($lineCharacteristicsServiceGet->getLastError());