我想连接API-发送请求并获取数据。
首先,我得到了所有可用的功能:
$client = new SoapClient('https://website.com/api.asmx?wsdl');
print_r($client->__getFunctions());
我显示阵列,像这样:
[0] => CheckExampleResponse CheckExample(CheckExample $parameters)
所以,我必须使用这种方式:
$client->CheckExample($params);
但是,我不知道如何发送这个XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="XmlServices">
<soapenv:Header/>
<soapenv:Body>
<xs:GetExample>
<xs:request>
<xs:Credentials>
<xs:UserName>?</xs:UserName>
<xs:Password>?</xs:Password>
<xs:PostlId>?</xs:HotelId>
</xs:Credentials>
<xs:DataTest>2015-01-01T00:00:00</xs:DataTest>
<xs:DataTest2>2015-01-02T23:59:59</xs:DataTest2>
<xs:StatusTest>publish</xs:StatusTest>
</xs:request>
</xs:GetExample>
</soapenv:Body>
</soapenv:Envelope>
当我将这个XML字符串作为参数传递给CheckExample
时,我会得到这样的错误:"请求参数不能为null。"
谢谢。
GetExample方法也应该出现在__getFunctions调用中。那么这应该起作用:
<?php
$client = new SoapClient('https://website.com/api.asmx?wsdl');
$soapmessage = [
'request' => [
'Credentials' => [
'UserName' => '?',
'Password' => '?',
'PostlId' => '?'
],
'DataTest' => '2015-01-01T00:00:00',
'DataTest2' => '2015-01-02T23:59:59',
]
];
$result = $client->GetExample($soapmessage);
print_r($result);
当您将SOAP函数作为SoapClient
的方法进行调用时,实际上是在调用SoapClient::__soapCall()
函数,并将函数名称作为第一个参数进行传递。因此,了解这个函数的参数是很好的。
您可以看到,要传递参数,需要传递一个数组。这必须与SOAP服务器所期望的相匹配;详细信息可以在WSDL中找到,并且不会通过对SoapClient::__getFunctions()
的调用来显示。如果您不想读取WSDL,那么SOAP服务提供者还应该提供API文档来确定正确的值。
值得记住的是,即使SOAP函数不需要任何参数,也必须向PHP函数传递一个空数组。