Это мой первый раз с веб-сервисами / SOAP … Я пытаюсь использовать .NET-сервисы с использованием PHP, но безрезультатно. Я искал и читал все страницы, которые Google поднимает для чего-либо, связанного с этим, но я все еще потерян.
Дело в том, что SOAP-сервис, который я пытаюсь вызвать, имеет заголовок авторизации, и я не могу определить способ аутентификации моего запроса.
Я пробовал php-soapclient и NuSoap, но не существует образца кода, который бы помог. Поэтому любая помощь была бы замечательной.
Ниже приведен пример запроса и ответа SOAP 1.1.
POST /OxiWalletService/Service.asmx HTTP/1.1 Host: 172.160.0.49 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/WS_GetData" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <AuthHeader xmlns="http://tempuri.org/"> <UserName>string</UserName> <Password>string</Password> </AuthHeader> </soap:Header> <soap:Body> <WS_GetData xmlns="http://tempuri.org/"> <xmlString>string</xmlString> </WS_GetData> </soap:Body> </soap:Envelope>
отклик
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <WS_GetDataResponse xmlns="http://tempuri.org/"> <WS_GetDataResult>string</WS_GetDataResult> </WS_GetDataResponse> </soap:Body> </soap:Envelope>
Кто-нибудь может прочесть пример кода о том, как использовать такую услугу.
Спасибо заранее!
Это код, который я использовал для вызова веб-службы
<?php $soap_client = new SoapClient("http://172.160.0.49/OxiWalletService/Service.asmx?WSDL"); $Uid='oxigen'; $Pwd='oxigen'; $ns = "http://tempuri.org/"; //Body of the Soap Header. $headerbody = array('UserName' => $Uid, 'Password' => $Pwd ); //Create Soap Header. $header = new SOAPHeader($ns, 'AuthHeader', $headerbody); //set the Headers of Soap Client. $soap_client->__setSoapHeaders($header); $par="<Wallet><SPName>AuthenticateMerchantWebVending</SPName><Parameters><Parameter><Name>@Account</Name><Size>50</Size><Value>1135600016</Value><Type>varchar</Type></Parameter><Parameter><Name>@Password</Name><Size>20</Size><Value>0OgknrdonyM=</Value><Type>varchar</Type></Parameter></Parameters><ParameterCount>2</ParameterCount><DataBase>1</DataBase></Wallet>"; $param=array('xmlString'=>$par); $result=$soap_client->__SoapCall('WS_GetData',$param); print_r ($result); ?>
и я получаю следующее в качестве вывода:
stdClass Object ([WS_GetDataResult] => 2Unknown Error)
Идеи ??
Итак, получается, что вы должны передать второй аргумент с параметрами в качестве ключа массива
это означает
$result=$soap_client->__SoapCall('WS_GetData',$param);
должно быть
$result=$soap_client->__SoapCall('WS_GetData',array('parameters'=>$param));
Это работает сейчас.