Здравствуйте
Столкнулся с такой проблемой.
Мне нужно добавлять клиента в базу 1с при помощи SOAP.
Но при обращении к функции я получаю ошибку
Uncaught SoapFault exception: [soap:Client] Неизвестная ошибка. Недостаточно параметров операции по причине: Недостаточно параметров операции in /1c/test.php:18 Stack trace: #0 /test.php(18): SoapClient->__soapCall('CreateClient', Array) #1 {main} thrown in /home/lenzcars/chaly.xyz/aura/1c/test.php on line 18
Код
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient('http://myhost/A2-TEST/ws/ChatBot?wsdl', array(
'login' => "mylogin", 'password' => "mypassword"
));
//array(2) {
// [0]=> string(59) "CreateClientResponse CreateClient(CreateClient $parameters)"
// [1]=> string(59) "CreateClientResponse CreateClient(CreateClient $parameters)" }
var_dump($client->__getFunctions());
$params = array('name' => 'testname', 'surname' => 'testsurname', 'phone' => '0660000000', 'ID_bot' => '123456', 'clubID' => '123456');
$xml = $client->__soapCall('CreateClient', $params);
var_dump($xml);
?>
<xs:element name="CreateClient">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" nillable="true"/>
<xs:element name="surname" type="xs:string" nillable="true"/>
<xs:element name="phone" type="xs:string"/>
<xs:element name="ID_bot" type="xs:string"/>
<xs:element name="clubID" type="xs:string" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Это мой первый опыт работы с SOAP)
Не могу найти решение.
Буду благодарен любой помощи
koupny
29.07.11
✎
15:45
Здравствуйте! Необходимо осуществить подключение 1С 8.2 к сайту через SOAP используя веб-сервис.
Проблема возникает, при передачи в веб-сервис значения параметра. Ошибка: «Недостаточно параметров операции по причине: Недостаточно параметров операции.»
Когда параметров нету, все отлично работает.
soapParameters = Array(‘login’ => «login», ‘password’ => «psw») ;
$client = new SoapClient(«http://XX.XX.XX.XX/ws/ws1.1cws?wsdl», $soapParameters);
$result = $client->helloWorld();
echo $result->return;
А как правильно передать значения параметрам веб-сервиса?
Заранее спасибо!
Просто Лёха
29.07.11
✎
15:48
У меня вот так работает:
$client = new SoapClient(«http://127.0.0.1/wsserv/ws/service.1cws?wsdl» , array(‘login’ => «Login», ‘password’ => «mypassword», ‘exceptions’ => 1));
$params[«Сотрудник»] = $cmluids;
$params[«ДатаНачала»] = $start_date;
$params[«ДатаОкончания»] = $end_date;
$result = $client-> Returninfo($params);
Просто Лёха
29.07.11
✎
15:52
(1) Returninfo — у меня так процедура экспортная веб сервиса называется
koupny
29.07.11
✎
15:59
хм..странно, у меня такая ошибка:
«Fatal error: Uncaught SoapFault exception: [soap:Client] Неизвестная ошибка. Недостаточно параметров операции по причине: Недостаточно параметров операции »
Вот код мой:
$client = new SoapClient(«http://127.0.0.1/wsgara/ws/ws1.1cws?wsdl», array(‘login’ => «mylogin», ‘password’ => «mypsw»,’exceptions’ => 1));
$params[«newparam»] = «1»;
$result = $client-> helloWorld($params);
Может у меня проблема именно в конфигурации?
[URL=http://www.radikal.ru][IMG]http://s40.radikal.ru/i087/1107/be/19b5d75cabfe.jpg[/IMG][/URL]
koupny
29.07.11
✎
16:01
Просто Лёха
29.07.11
✎
16:04
(3) Если без параметров работает, а с параметром такая вещь — значит проблема к конфигурации
koupny
29.07.11
✎
16:05
да( интересно в чем же именно(
Просто Лёха
29.07.11
✎
16:05
свойства newparam — стоит галочка возможно пустое значение? И какой тип возвращаемого значения задан?
koupny
29.07.11
✎
16:06
галочка не стоит. а тип — string
Fragster
29.07.11
✎
16:06
Просто Лёха
29.07.11
✎
16:06
Попробуй поставить и ещё раз проверить
koupny
29.07.11
✎
16:09
галку поставил — такая же ошибка(
koupny
29.07.11
✎
16:10
Самое интересное что, если параметра нету. Работает все отлично.
Просто Лёха
29.07.11
✎
16:12
Туплю, у тебя параметра то нет (4)
Просто Лёха
29.07.11
✎
16:14
(13) Т.е. не так поставь галочки и и свойству helloword и параметру свойства и newparam, параметра псомотри так же типы значения, направления параметра
koupny
29.07.11
✎
16:19
у helloWorld — галка «Возможно пусто значение» — стоит. Тип возвращаемого — string. Аналогично и у параметра newparam + направление передачи — «входной».
Просто Лёха
29.07.11
✎
16:25
скинь то что отображается в браузере по ссылке
http://127.0.0.1/wsgara/ws/ws1.1cws?wsdl
koupny
29.07.11
✎
16:36
<definitions xmlns=»http://schemas.xmlsoap.org/wsdl/» xmlns:soap12bind=»http://schemas.xmlsoap.org/wsdl/soap12/» xmlns:soapbind=»http://schemas.xmlsoap.org/wsdl/soap/» xmlns:tns=»helloWorld» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsd1=»helloWorld» name=»webService» targetNamespace=»helloWorld»>
<types>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xs1=»helloWorld» targetNamespace=»helloWorld» elementFormDefault=»qualified»>
<xs:element name=»helloWorld»>
<xs:complexType>
<xs:sequence>
<xs:element name=»newparam» type=»xs:string» nillable=»true»/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=»helloWorldResponse»>
<xs:complexType>
<xs:sequence>
<xs:element name=»return» type=»xs:string» nillable=»true»/>
<xs:element name=»newparam» type=»xs:string» nillable=»true»/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name=»helloWorldRequestMessage»>
<part name=»parameters» element=»tns:helloWorld»/>
</message>
<message name=»helloWorldResponseMessage»>
<part name=»parameters» element=»tns:helloWorldResponse»/>
</message>
<portType name=»webServicePortType»>
<operation name=»helloWorld»>
<input message=»tns:helloWorldRequestMessage»/>
<output message=»tns:helloWorldResponseMessage»/>
</operation>
</portType>
<binding name=»webServiceSoapBinding» type=»tns:webServicePortType»>
<soapbind:binding style=»document» transport=»http://schemas.xmlsoap.org/soap/http»/>
<operation name=»helloWorld»>
<soapbind:operation style=»document»/>
<input>
<soapbind:body use=»literal»/>
</input>
<output>
<soapbind:body use=»literal»/>
</output>
</operation>
</binding>
<binding name=»webServiceSoap12Binding» type=»tns:webServicePortType»>
<soap12bind:binding style=»document» transport=»http://schemas.xmlsoap.org/soap/http»/>
<operation name=»helloWorld»>
<soap12bind:operation style=»document»/>
<input>
<soap12bind:body use=»literal»/>
</input>
<output>
<soap12bind:body use=»literal»/>
</output>
</operation>
</binding>
<service name=»webService»>
<port name=»webServiceSoap» binding=»tns:webServiceSoapBinding»>
<documentation>
<wsi:Claim xmlns:wsi=»http://ws-i.org/schemas/conformanceClaim/» conformsTo=»http://ws-i.org/profiles/basic/1.1″/>
</documentation>
<soapbind:address location=»http://127.0.0.1/wsgara/ws/ws1.1cws»/>
</port>
<port name=»webServiceSoap12″ binding=»tns:webServiceSoap12Binding»>
<soap12bind:address location=»http://127.0.0.1/wsgara/ws/ws1.1cws»/>
</port>
</service>
</definitions>
Просто Лёха
29.07.11
✎
17:00
(17) сейчас у себя попробую развернуть
koupny
29.07.11
✎
17:15
попробуйте.. вдруг получиться, а то я не знаю уже в чем может быть проблема(
Просто Лёха
29.07.11
✎
19:24
(19) Ну как бы все отлично, сейчас скину скрин
Просто Лёха
29.07.11
✎
19:37
Код файла:
<?php
// Отключаем кэширование для SOAP. Если этого не сделать,
// функции веб-сервисов будут работать некорректно.
ini_set(«soap.wsdl_cache_enabled», «0»);
//Работа с исследованиями
$client = new SoapClient(«http://192.168.1.10/MyApp/ws/preved.1cws?wsdl» , array(‘login’ => «admin», ‘password’ => «admin», ‘exceptions’ => 1));
$params[«param»] = «1234567890»;
$result = $client->getinfo($params);
Var_dump($result);
?>
Просто Лёха
29.07.11
✎
19:43
Версия 1С:Предприятие 8.2 (8.2.13.219)
База файловая, Apache 2.2, запускал с другого компа, т.к. на этом не стоит PHP, PHP Version 5.3.2-1
Поддржека Soap http://screencast.com/t/7EyaLj2iL
Обращение в веб сервису
http://screencast.com/t/2lLqfY8jx
koupny
29.07.11
✎
22:52
Алексей! Вы молодец, все получилось, проблема была в кэширование wsdl. Как только это сделал, все заработало!
Спасибо большое за потраченное время!
Просто Лёха
30.07.11
✎
02:18
Да не за что
Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Возвращаем массив
Хочу рассказать об ошибках, с которыми столкнулся при разработке веб-сервисов на 1С. Статью буду дополнять по мере получения опыта.
1
Это сообщение об ошибке при подключении к веб сервису из PHP.
[31-Mar-2013 05:32:02 UTC] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://test.ru/test/ws/WebServices?wsdl’ : failed to load external entity
Данное сообщение говорит лишь о недоступности веб-сервера, на котором опубликована база. В этом случае попробуйте вручную вызвать http://test.ru/test/ws/WebServices?wsdl и убедиться, что WSDL формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.
2
02-Apr-2013 13:46:10 UTC] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/users/b/test/domains/test.ru/testDIR/test.php:169
Эта ошибка возникает если WSDL возвращается с ошибкой. Есть несколько причин для этой ошибки:
- Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
- Возникает если в PHP включить кеш WSDL. Кеш запоминает WSDL и при каждом вызове веб-операции не запрашивает его, но если вы поменяли веб-сервис, то произойдет ошибка. Вообще, при разработке кеш стоит отключить, а если уже все работает то для скорости лучше включить. Ускорение при отключенном кеше заметное. Для примера скажу, что создание объекта SoapClient с выключенным кешем занимает примерно 2 сек, а с включенным — за сотые доли секунды. Отключить можно так:
ini_set
(
"soap.wsdl_cache_enabled"
, 0);
или
$client
=
new
SoapClient(
'http://somewhere.com/?wsdl'
,
array
(
'cache_wsdl'
=> 0));
3
Ошибка SOAP сервера: Неизвестная ошибка. bad allocation.
Скорее всего недостаток оперативной памяти — проверьте запрос и результат вывода веб сервиса. Запрос может быть сложным, потому может быстро исчерпать оперативную память.
Здравствуйте! Подскажите,пожалуйста, как задать метод(InfoCard) в запросе
Пишу его через таким образом $url =*****/InfoCard; Выдает не ошибку api, а вот этакое
» soap:Client Неизвестная ошибка. Ошибка разбора XML: — [1,1] Фатальная ошибка: Document is empty по причине: Ошибка разбора XML: — [1,1] Фатальная ошибка: Document is empty «
$url =*****/InfoCard;
$xml = [
'FirstData' => '20120101',
'LastData' => '20220101',
'INN' => '3202010293',
'Nom' => '72',
];
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => http_build_query($xml),
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
$server_output = curl_exec($ch);
curl_close($ch);
- IT
- Cancel
Хочу рассказать об ошибках, с которыми столкнулся при разработке веб-сервисов на 1С. Статью буду дополнять по мере получения опыта.
1. Это сообщение об ошибке при подключении к веб сервису из PHP.
[31-Mar-2013 05:32:02 UTC] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://test.ru/test/ws/WebServices?wsdl’ : failed to load external entity
Данное сообщение говорит лишь о недоступности веб-сервера, на котором опубликована база. В этом случае попробуйте вручную вызвать http://test.ru/test/ws/WebServices?wsdl и убедиться, что WSDL формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.
2. 02-Apr-2013 13:46:10 UTC] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/users/b/test/domains/test.ru/testD
Эта ошибка возникает если WSDL возвращается с ошибкой. Есть несколько причин для этой ошибки:
- Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
- Возникает если в PHP включить кеш WSDL. Кеш запоминает WSDL и при каждом вызове веб-операции не запрашивает его, но если вы поменяли веб-сервис, то произойдет ошибка. Вообще, при разработке кеш стоит отключить, а если уже все работает то для скорости лучше включить. Ускорение при отключенном кеше заметное. Для примера скажу, что создание объекта SoapClient с выключенным кешем занимает примерно 2 сек, а с включенным — за сотые доли секунды. Отключить можно так:
ini_set(«soap.wsdl_cache_enabled», 0);
или
$client = new SoapClient(‘http://somewhere.com/?wsdl’, array(‘cache_wsdl’ => 0));
3. Ошибка SOAP сервера: Неизвестная ошибка. bad allocation.
Скорее всего недостаток оперативной памяти — проверьте запрос и результат вывода веб сервиса. Запрос может быть сложным, потому может быстро исчерпать оперативную память.