Intereting Posts
PHP-почта не работает по какой-либо причине PHP – выполнить веб-скрипт как сценарий командной строки? Как я могу выбрать и загрузить несколько файлов с помощью HTML и PHP, используя HTTP POST? Как сделать исполняемый файл phar? Как удалить элементы dd и dt html при рендеринге элемента Form в ZF? Доступ к типу varray, определенному внутри пакета, с помощью oci_new_collection Добавить пользовательский атрибут для создания шаблонов электронной почты – Magento Арабская форма PDF для PHP для MYSQL, декодирование Unicode? regex php – найти вещи в div с определенным идентификатором Создание ассоциативного массива из WordPress $ wpdb-> get_results Ошибка кодирования в PHP-файле XML Эффективный алгоритм для поиска всех «символьно-равных» строк? добавьте разбиение на страницы на «для каждого» цикла в wordpress Откат MySQL в обработчике скрипт (while-loop) останавливается и не имеет выхода, когда выбрано несколько столбцов

PHP и доступ к ComplexType в веб-службе SOAP

Я хочу позвонить в веб-сервис. И веб-сервис содержит некоторые элементы complextype. Я получаю хорошие результаты с ASP.NET и soapUI. Но я получаю сообщение об ошибке с PHP. Я не мог понять.

Итак, вы могли бы мне помочь?

Благодарю.

Функция, которую я хочу вызвать:

<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"/> 

Код .NET (он работает):

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

XML (он работает с 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> Название <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> 

И PHP Code (это не РАБОТАЕТ):

 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; 

Я получаю эту ошибку:

 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 

С try and catch:

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

Итак, я попытался воссоздать вашу проблему, и поскольку у меня не было доступа к вашему сервису, я выбираю преобразование температуры, которое не сработало, пока я не добавил

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

возможно, вы также можете попробовать использовать stdClass как-то вроде

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Вы должны знать, что я изучаю php, и единственный способ, которым я участвую, – решить проблемы, так что это я пытаюсь решить проблему.

рабочий рабочий код преобразования рабочей силы ниже:

 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); 

У меня была помощь от @Sergiu Paraschiv

ошибка внутреннего сервера при запуске soapclient