Использовать веб-службу .Net с помощью PHP

Это мой первый раз с веб-сервисами / 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>&lt;Parameter&gt;&lt;Name&gt;@Account&lt;/Name&gt;&lt;Size&gt;50&lt;/Size&gt;&lt;Value&gt;1135600016&lt;/Value&gt;&lt;Type&gt;varchar&lt;/Type&gt;&lt;/Parameter&gt;&lt;Parameter&gt;&lt;Name&gt;@Password&lt;/Name&gt;&lt;Size&gt;20&lt;/Size&gt;&lt;Value&gt;0OgknrdonyM=&lt;/Value&gt;&lt;Type&gt;varchar&lt;/Type&gt;&lt;/Parameter&gt;</Parameters><ParameterCount>2</ParameterCount><DataBase>1</DataBase></Wallet>";
$param=array('xmlString'=>$par);

$result=$soap_client->__SoapCall('WS_GetData',$param);

print_r ($result);

?>

и в качестве вывода я получаю следующее:

Объект stdClass ([WS_GetDataResult] => 2Неизвестная ошибка)

Идеи ??

Получается, что вы должны передать второй аргумент с параметрами в качестве ключа массива

имея в виду это

$result=$soap_client->__SoapCall('WS_GetData',$param);

должно быть

$result=$soap_client->__SoapCall('WS_GetData',array('parameters'=>$param));

Теперь это работает.


person Tanmay    schedule 30.01.2012    source источник
comment
также посетите scottnichol.com/nusoapprogwsdl.htm, чтобы получить учебное пособие   -  person Arfeen    schedule 30.01.2012


Ответы (1)


Я думаю, это должно помочь: www.php.net/manual/en/soapclient .setsoapheaders.php

$ns = "http://tempuri.org/"

//Body of the Soap Header.
$headerbody = array('UserName' => $yourUsername,
                    'Password' => $yourPassword,
              );

//Create Soap Header.       
$header = new SOAPHeader($ns, 'AuthHeader', $headerbody);       

//set the Headers of Soap Client.
$soap_client->__setSoapHeaders($header);
person Uku Loskit    schedule 30.01.2012
comment
Хорошо, это первое. хотя у меня включен SOAPClient, я получаю эту ошибку Неопределенная переменная: soap_client в C: \ wamp \ www \ soap1.php в строке 14 и Неустранимая ошибка: вызов функции-члена __setSoapHeaders () на не-объекте в C: \ wamp \ www \ soap1.php в строке 14 - person Tanmay; 30.01.2012
comment
ну, вам действительно нужен экземпляр клиента мыла, мой код частичный. Разместите свой код без реальных данных, и мы постараемся выяснить, в чем вы ошибаетесь. - person Uku Loskit; 30.01.2012
comment
для меня WSDL даже не загружается с URL-адреса. - person Uku Loskit; 30.01.2012
comment
Большое спасибо за вашу помощь. Я понял это и опубликовал решение выше. СПАСИБО! - person Tanmay; 30.01.2012
comment
Вы, сэр, только что спасли мои выходные. Хотел бы я купить тебе пива. - person slhsen; 21.09.2012