我从PHP的SOAP库开始,我无法弄清楚如何执行我的请求:
服务器有一个用户友好的API,它给了我通过的请求,但我不知道我应该怎么做。
以下是我目前的观点:
$soap = new SoapClient("https://www.dmc.sfr-sh.fr/DmcWS/1.5.6/MessagesUnitairesWS?wsdl");
$soap->getSingleCallCra();
我应该通过的请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://servicedata.ws.dmc.sfrbt/">
<soapenv:Header>
<ser:authenticate>
<serviceId>********</serviceId>
<servicePassword>******</servicePassword>
<spaceId>*******</spaceId>
<lang>fr_FR</lang>
</ser:authenticate>
</soapenv:Header>
<soapenv:Body>
<ser:getSingleCallCra>
<beginDate>2017-10-17T00:00:00</beginDate>
</ser:getSingleCallCra>
</soapenv:Body>
</soapenv:Envelope>
SOAP客户端适用于没有参数的其他函数,但是当我调用此函数时,我得到了一个已翻译的java NPE异常。
有谁能告诉我如何将参数和验证传递给函数?
感谢。
答案 0 :(得分:3)
$soap = new SoapClient("https://www.dmc.sfr-sh.fr/DmcWS/1.5.6/MessagesUnitairesWS?wsdl");
要向soapcall添加标头,请使用__setSoapHeaders方法,如下所示:
$soap->__setSoapHeaders(array(
//(namespace, name, data)
new SoapHeader("http://servicedata.ws.dmc.sfrbt/",'authenticate',array(
'serviceId' => '********',
'servicePassword' => '******',
'spaceId' => '*******',
'lang' => 'fr_FR',
))
));
这些参数将进入肥皂体。在PHP中,您可以使用对象或关联数组作为输入,因为它们都被解释为xml,如key =&gt;价值对。
$soap_body_parameters = array(
'beginDate' => '2017-10-17T00:00:00',
);
$response = $soap->getSingleCallCra($soap_body_parameters);
print_r($response);
soapclient类的返回值始终是一个对象,因此请记住使用箭头符号&#39; $ object-&gt; property&#39;获取相关数据。
class sfr_soap {
function __construct($serviceId, $servicePassword, $spaceId, $lang = 'fr_FR'){
$url = "https://www.dmc.sfr-sh.fr/DmcWS/1.5.6/MessagesUnitairesWS?wsdl";
$this->client = new SoapClient($url);
$soap->__setSoapHeaders(array(
new SoapHeader("http://servicedata.ws.dmc.sfrbt/",'authenticate',array(
'serviceId' => $serviceId,
'servicePassword' => $servicePassword,
'spaceId' => $spaceId,
'lang' => $lang,
))
));
}
public function __call($name, $args = array()){
$response = $this->client->$name($args);
// do something with the response here, like extract the meaningful parts of the data
return $response;
}
}
init喜欢这个
$sfr = new sfr_soap($serviceId, $servicePassword, $spaceId);
或者像这样,如果你想指定语言
$sfr = new sfr_soap($serviceId, $servicePassword, $spaceId, $lang);
像这样使用
$data = $sfr->getSingleCallCra(array(
'beginDate' => '2017-10-17T00:00:00'
));
答案 1 :(得分:1)
您可以通过多种方式将参数传递给SOAP函数调用,如文档中所述:SoapClient::__soapCall
传递给函数的参数数组。这可以是有序数组或关联数组。请注意,大多数SOAP服务器都需要提供参数名称,在这种情况下,它必须是关联数组。
所以在你的情况下,电话应该是:
$soap->getSingleCallCra(array(
'beginDate' => '2017-10-17T00:00:00',
));
我希望,我可以提供任何帮助。