我试图从远程WSDL Web服务中使用某些过滤器。尝试这样做时我没有错误,但我得到的只是数据的完整列表,这些参数被忽略。
致电$client->__getFunctions()
检索空白页面,因此我不知道该怎么做。
这是XML:
<s:element name="Entities">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Format" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="wherefilter" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ordercondition" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
这就是我尝试用PHP做的事情:
public static function fetch($name = 'Entities')
{
$base = 'http://tempuri.org/';
$client = new \SoapClient(null, [
'location' => '...',
'uri' => '...',
'trace' => 1,
'exceptions' => true
]);
$params = ['Format' => 'JSON'];
try {
// $params is being ignored
$data = $client->__soapCall($name, $params, ['soapaction' => $base . $name]);
return $data;
}
catch (\SoapFault $ex) {
abort(403, $ex);
}
catch (Exception $ex) {
die($ex);
}
}
任何关于我做错事的提示都将受到赞赏。
答案 0 :(得分:0)
在环绕互联网寻找答案之后,我不得不重新构建代码以使其成功。我不完全确定为什么旧的设置不起作用,但这就是它现在的工作方式:
public static function fetch()
{
$options = [
'trace' => 1,
'exceptions' => true
];
$client = new \SoapClient('my_soap_url.asmx?WSDL', $options);
try {
$input = new \stdClass();
$input->Format = "JSON";
$data = $client->Entities($input);
return reset($data);
}
catch (Exception $ex) {
echo 'Caught exception: ', $e->getMessage(), PHP_EOL . PHP_EOL;
echo 'REQUEST:' . $client->__getLastRequestHeaders() . $client->__getLastRequest() . PHP_EOL . PHP_EOL;
echo 'RESPONSE:' . $client->__getLastResponseHeaders() . $client->__getLastResponse();
}
}