[英]SOAP PHP : how to translate request file to PHP function call
我从PHP的SOAP库开始,我不知道如何执行我的请求:
服务器具有用户友好的API,该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异常。
谁能告诉我如何将参数和身份验证传递给函数?
谢谢。
$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 =键对值对。
$soap_body_parameters = array(
'beginDate' => '2017-10-17T00:00:00',
);
$response = $soap->getSingleCallCra($soap_body_parameters);
print_r($response);
soapclient类的返回值始终是一个对象,因此请记住使用箭头符号“ $ object-> property”来获取相关数据。
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;
}
}
像这样初始化
$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'
));
您可以按照文档中所述的多种方式将参数传递给SOAP函数调用: SoapClient :: __ soapCall
要传递给函数的参数数组。 这可以是有序数组或关联数组。 请注意,大多数SOAP服务器都需要提供参数名称,在这种情况下,它必须是一个关联数组。
因此,在您的情况下,呼叫应为:
$soap->getSingleCallCra(array(
'beginDate' => '2017-10-17T00:00:00',
));
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.