services paso ejemplos ejemplo crear consumir cliente php web-services soap complextype

paso - PHP y acceso a ComplexType en el servicio web SOAP



web service xml php (1)

Entonces, traté de recrear tu problema y como no tenía acceso a tu servicio, elegí Conversión de temperatura que no funcionó hasta que agregué

$SoapCallParameters = new stdClass(); $SoapCallParameters->nCelcius = 30; $obj = $client->CelciusToFahrenheit($SoapCallParameters);

tal vez también podría intentar usar el stdClass algo así como

$hotelSearch = new stdClass(); $hotelSearch->searchClass->BRANCHID = 000; $hotelSearch->searchClass->UNIQUECODE = YIO;

DESCARGO DE RESPONSABILIDAD : Debes saber que estoy aprendiendo php y la única forma en que aprendo es resolviendo problemas, así que este soy yo tratando de resolver un problema.

mi código de trabajo de conversión de temperatura de trabajo es el siguiente:

error_reporting(E_ALL); ini_set(''display_errors'', ''1''); $url = "http://webservices.daehosting.com/services/TemperatureConversions.wso?WSDL"; $client = new SoapClient($url, array("trace" => 1, "exception" => 0)); var_dump($client->__getFunctions()); $SOAPCall = "CelciusToFahrenheit"; $SoapCallParameters = new stdClass(); $SoapCallParameters->nCelcius = 30; $obj = $client->CelciusToFahrenheit($SoapCallParameters); var_dump($obj);

Tuve ayuda de @Sergiu Paraschiv

error interno del servidor al ejecutar soapclient

Quiero hacer una llamada a un servicio web. Y el servicio web contiene algunos elementos de tipo complejo. Estoy obteniendo buenos resultados con ASP.NET y soapUI. Pero estoy obteniendo un error con PHP. No pude descifrarlo.

Entonces, ¿podrías ayudarme por favor?

Gracias.

La función a la que quiero llamar:

<xs:element name="GetHotelSearch"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="searchClass" nillable="true" type="q13:HotelSearch" xmlns:q13="http://schemas.datacontract.org/2004/07/Model"/> <xs:element minOccurs="0" name="recorCount" type="xs:int"/> <xs:element minOccurs="0" name="sortType" type="q14:SortType" xmlns:q14="http://schemas.datacontract.org/2004/07/Model"/> <xs:element minOccurs="0" name="sortFields" nillable="true" type="q15:ArrayOfSortField" xmlns:q15="http://schemas.datacontract.org/2004/07/Model"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="GetHotelSearchResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="GetHotelSearchResult" nillable="true" type="q16:ArrayOfHotelSummary" xmlns:q16="http://schemas.datacontract.org/2004/07/Model"/> <xs:element minOccurs="0" name="recorCount" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:element>

ComplexTypes:

<xs:complexType name="HotelSearch"> <xs:sequence> <xs:element minOccurs="0" name="BRANCHID" type="xs:int"/> <xs:element minOccurs="0" name="UNIQUECODE" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:simpleType name="SortType"> <xs:restriction base="xs:string"> <xs:enumeration value="Ascending"> <xs:annotation> <xs:appinfo> <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1</EnumerationValue> </xs:appinfo> </xs:annotation> </xs:enumeration> <xs:enumeration value="Descending"> <xs:annotation> <xs:appinfo> <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2</EnumerationValue> </xs:appinfo> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> <xs:element name="SortType" nillable="true" type="tns:SortType"/> <xs:complexType name="ArrayOfSortField"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="SortField" type="tns:SortField"/> </xs:sequence> </xs:complexType> <xs:element name="ArrayOfSortField" nillable="true" type="tns:ArrayOfSortField"/> <xs:simpleType name="SortField"> <xs:restriction base="xs:string"> <xs:enumeration value="PENSIONTYPENAME"> <xs:annotation> <xs:appinfo> <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1</EnumerationValue> </xs:appinfo> </xs:annotation> </xs:enumeration> <xs:enumeration value="HOTELNAME"> <xs:annotation> <xs:appinfo> <EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2</EnumerationValue> </xs:appinfo> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> <xs:element name="SortField" nillable="true" type="tns:SortField"/>

Código .NET (está funcionando):

int _recordCount = 10; List<HotelSummary> hotels = hc.GetHotelSearch(new HotelSearch() { BRANCHID = 000, UNIQUECODE = "YIO" }, ref _recordCount, SortType.Ascending, new SortField[] { SortField.HOTELNAME }).ToList();

El XML (está trabajando con soapUI):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:mod="http://schemas.datacontract.org/2004/07/Model"> <soapenv:Header/> <soapenv:Body> <tem:GetHotelSearch> <tem:searchClass> <mod:BRANCHID>000</mod:BRANCHID> <mod:UNIQUECODE>YIO</mod:UNIQUECODE> </tem:searchClass> <tem:recorCount>10</tem:recorCount> <tem:sortType>Ascending</tem:sortType> <tem:sortFields> <mod:SortField>HOTELNAME</mod:SortField> </tem:sortFields> </tem:GetHotelSearch> </soapenv:Body> </soapenv:Envelope>

Y código PHP (no funciona):

ini_set("soap.wsdl_cache_enabled", "0"); $url=''http://localhost/Service/Service.svc?wsdl''; $client = new SoapClient($url); $HotelSearch= array(''BRANCHID'' => 000,''UNIQUECODE'' => ''YIO''); $SortField= array(''SortField'' => ''HOTELNAME''); $result = $client->GetHotelSearch($HotelSearch, 10, ''Ascending'', $SortField); $array = $result->GetHotelSearchResult->HotelSummary;

Me aparece este error:

Fatal error: Uncaught SoapFault exception: [a:InternalServiceFault] End element ''Body'' from namespace ''http://schemas.xmlsoap.org/soap/envelope/'' expected. Found element ''param1'' from namespace ''''. Line 2, position 155. in D:/[.Projeler]/musteri/webservis/test.php:98 Stack trace: #0 D:/[.Projeler]/musteri/webservis/test.php(98): SoapClient->__call(''GetHotelSearch'', Array) #1 D:/[.Projeler]/musteri/webservis/test.php(98): SoapClient->GetHotelSearch(Array, 10, ''Ascending'', Object(stdClass)) #2 {main} thrown in D:/[.Projeler]/musteri/webservis/test.php on line 98

Con try y catch:

End element ''Body'' from namespace ''http://schemas.xmlsoap.org/soap/envelope/'' expected. Found element ''param1'' from namespace ''''. Line 2, position 155.