我很难让SOAP请求正常工作,这需要XML字符串作为输入。
投掷
“SOAP Fault:服务器无法处理请求.--->值不能为null。参数名称:s”
无论我发送什么输入,我都使用了nusoap,但无济于事,PHP肥皂库。 我正在使用的代码是:
<?
$aOptions = array(
'location' => 'http://webserviceurl.asmx',
'uri' => 'http://tempuri.org/',
"style" => SOAP_RPC,
"use" => SOAP_ENCODED
);
$client = new SOAPClient(null, $aOptions);
$request ='<item xmlns="rmsItem">
<columns>
<column>description</column>
<column>department</column>
<column>brand</column>
<column>lastsold</column>
<column>lastupdated</column>
<column>quantityonhand</column>
<column>weight</column>
</columns>
<filters>
<filter>
<filterColumn>quantityonhand</filterColumn>
<operator>greaterthan</operator>
<filterValue>20</filterValue>
</filter>
<filter>
<filterColumn>lastsold</filterColumn>
<operator>greaterthan</operator>
<filterValue>01-01-2005</filterValue>
</filter>
</filters>
<sortColumns>
<sortColumn>
<sortColumnName>lastsold</sortColumnName>
<sortType>ascending</sortType>
</sortColumn>
<sortColumn>
<sortColumnName>quantityonhand</sortColumnName>
<sortType>descending</sortType>
</sortColumn>
</sortColumns>
</item>';
//$result = $client->__soapCall('getAllInfo',array('infoRequestXml'=>(string)($request),'errorMessage'=>'') ,array('soapaction' => 'http://webserviceurl/getAllInfo'));
$soapvar = new SoapVar($request , XSD_ANYXML);
$params = array("infoRequestXml" => $soapvar);
//print_r($params);
//$result = $this->soapclient->__soapCall("SaveItem", array("parameters"=>$params), null, $this->soapheaders);
try
{
$result=$client->__soapCall('getAllInfo',array("parameters"=>$params),array('soapaction' => 'http://webserviceurl/getAllInfo'));
}
catch (SoapFault $e) {
echo "SOAP Fault: ".$e->getMessage()."<br />\n";
}
echo "<pre>\n";
echo htmlspecialchars($client->__getLastRequest())."\n";
echo "Response:\n".htmlspecialchars($client->__getLastResponse())."\n";
echo "</pre>";
var_dump($result);
?>
我在最近两天撞到了墙上,搜索谷歌这个问题,但得不到解决或指导我的答案。
任何能够对此有所了解的人都将受到高度赞赏。 提前谢谢。
答案 0 :(得分:1)
不要通过SOAPVar运行XML,并且如果可以的话,请利用Web服务的WSDL选项:
<?php
$client = new SOAPClient(
'http://webserviceurl.asmx?WSDL',
array(
'location' => 'http://webserviceurl.asmx',
'trace' => 1,
'style' => SOAP_RPC,
'use' => SOAP_ENCODED,
)
);
$request = '<item xmlns="rmsItem">
<columns>
<column>description</column>
<column>department</column>
<column>brand</column>
<column>lastsold</column>
<column>lastupdated</column>
<column>quantityonhand</column>
<column>weight</column>
</columns>
<filters>
<filter>
<filterColumn>quantityonhand</filterColumn>
<operator>greaterthan</operator>
<filterValue>20</filterValue>
</filter>
<filter>
<filterColumn>lastsold</filterColumn>
<operator>greaterthan</operator>
<filterValue>01-01-2005</filterValue>
</filter>
</filters>
<sortColumns>
<sortColumn>
<sortColumnName>lastsold</sortColumnName>
<sortType>ascending</sortType>
</sortColumn>
<sortColumn>
<sortColumnName>quantityonhand</sortColumnName>
<sortType>descending</sortType>
</sortColumn>
</sortColumns>
</item>';
$result = array();
$params = array("infoRequestXml" => $request);
try {
$result = $client->__soapCall('getAllInfo', array("parameters"=>$params));
} catch (SoapFault $e) {
echo "SOAP Fault: ".$e->getMessage()."<br />\n";
}
echo "<pre>";
echo htmlspecialchars($client->__getLastRequestHeaders())."\n";
echo htmlspecialchars($client->__getLastRequest())."\n";
echo "Response:\n".htmlspecialchars($client->__getLastResponseHeaders())."\n";
echo htmlspecialchars($client->__getLastResponse())."\n";
echo "</pre>";
var_dump($result);
?>