Soap client неизвестная ошибка

Здравствуйте
Столкнулся с такой проблемой.
Мне нужно добавлять клиента в базу 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)
Не могу найти решение.
Буду благодарен любой помощи

SOAP PHP 1c 8.2 ☑ 0

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;

А как правильно передать значения параметрам веб-сервиса?

Заранее спасибо!

1

Просто Лёха

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

2

Просто Лёха

29.07.11

15:52

(1) Returninfo — у меня так процедура экспортная веб сервиса называется

3

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]

4

koupny

29.07.11

16:01

5

Просто Лёха

29.07.11

16:04

(3) Если без параметров работает, а с параметром такая вещь — значит проблема к конфигурации

6

koupny

29.07.11

16:05

да( интересно в чем же именно(

7

Просто Лёха

29.07.11

16:05

свойства newparam — стоит галочка возможно пустое значение? И какой тип возвращаемого значения задан?

8

koupny

29.07.11

16:06

галочка не стоит. а тип — string

9

Fragster

29.07.11

16:06

10

Просто Лёха

29.07.11

16:06

Попробуй поставить и ещё раз проверить

11

koupny

29.07.11

16:09

галку поставил — такая же ошибка(

12

koupny

29.07.11

16:10

Самое интересное что, если параметра нету. Работает все отлично.

13

Просто Лёха

29.07.11

16:12

Туплю, у тебя параметра то нет (4)

14

Просто Лёха

29.07.11

16:14

(13) Т.е. не так поставь галочки и и свойству helloword и параметру свойства и newparam,  параметра псомотри так же типы значения, направления параметра

15

koupny

29.07.11

16:19

у helloWorld — галка «Возможно пусто значение» — стоит. Тип возвращаемого — string. Аналогично и у параметра newparam + направление передачи — «входной».

16

Просто Лёха

29.07.11

16:25

скинь то что отображается в браузере по ссылке

http://127.0.0.1/wsgara/ws/ws1.1cws?wsdl

17

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>

18

Просто Лёха

29.07.11

17:00

(17) сейчас у себя попробую развернуть

19

koupny

29.07.11

17:15

попробуйте.. вдруг получиться, а то я не знаю уже в чем может быть проблема(

20

Просто Лёха

29.07.11

19:24

(19) Ну как бы все отлично, сейчас скину скрин

21

Просто Лёха

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

?>

22

Просто Лёха

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

23

koupny

29.07.11

22:52

Алексей! Вы молодец, все получилось, проблема была в кэширование wsdl. Как только это сделал, все заработало!

Спасибо большое за потраченное время!

24

Просто Лёха

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 возвращается с ошибкой. Есть несколько причин для этой ошибки:

  1. Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
  2. Возникает если в 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);

Category:

  • 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/testDIR/test.php:169

Эта ошибка возникает если WSDL возвращается с ошибкой. Есть несколько причин для этой ошибки:

  1. Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
  2. Возникает если в 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.

Скорее всего недостаток оперативной памяти — проверьте запрос и результат вывода веб сервиса. Запрос может быть сложным, потому может быстро исчерпать оперативную память.

Понравилась статья? Поделить с друзьями:
  • Snowrunner ошибка crash dump sending utility
  • Snowrunner ошибка application has stopped working
  • Snowrunner codex mod installer ошибка
  • Smart ошибка жесткого диска лечить
  • Snlcon exe системная ошибка