Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: php soap client  (Прочитано 22989 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
php soap client
« : 11 Марта 2013, 20:06:54 »
Появилась задача: есть веб-сервис реализованный средствами 1С.
Находится по адресу http://192.168.1.83/ws/cardflow.1cws?wsdl

Я на тестовом сервере пытаюсь сделать клиента для него. Его задача передавать 3 параметра сервису:
  • DateTimeStart
  • DateTimeEnd
  • Card

Эти параметры могут быть пустыми - тогда выгребается все, что есть.
По итогу (это уже как второй этап) - разобрать полученное в БД.

Вот я пробую реализовать

<?php
$client 
= new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl");

$a="";
$b="";
$c="";
//$a $b и $c - будут при запуске скрипта задаваться, пока фиксированные значения прописываю 
$client = new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl");

$result $client->__soapCall("SomeFunction", array("DateTimeStart => $a""DateTimeEnd => $b""Card => $c"));
echo 
$result;


?>


Не пойму, что с функцией делать, и не уверен, что тут все правильно, кроме нее. Может быть кто-то, у кого есть опыт в этой теме поможет понять?
Спасибо :)

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Re: php soap client
« Ответ #1 : 12 Марта 2013, 11:10:56 »
Его задача передавать 3 параметра сервису:
  • DateTimeStart
  • DateTimeEnd
  • Card

Это параметры какой-то функции сервиса?

Смотри описание в wsdl файле.

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #2 : 12 Марта 2013, 11:55:44 »
Ну да, по описанию, которое я получил, я передаю эти три параметра (либо со значениями, либо пустыми). А где в wsdl файле я могу посмотреть название функции? я че-то подумал, что cardflow - это оно и есть.

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
Re: php soap client
« Ответ #3 : 12 Марта 2013, 12:15:03 »
Так правильнее с массивом поступать:
Код: (php) [Выделить]
array('DateTimeStart' => $a, 'DateTimeEnd' => $b, 'Card' => $c)

Ну и вызов проще такой
Код: (php) [Выделить]
$result = $client->SomeFunction($params);

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #4 : 12 Марта 2013, 12:57:32 »
Так правильнее с массивом поступать:
Код: (php) [Выделить]
array('DateTimeStart' => $a, 'DateTimeEnd' => $b, 'Card' => $c)
В смысле кавычки расположить? В $params запихать этот массив?
Цитировать
Ну и вызов проще такой
Код: (php) [Выделить]
$result = $client->SomeFunction($params);
Ну и по-поводу функции понятнее не стало :-\

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
Re: php soap client
« Ответ #5 : 12 Марта 2013, 13:03:13 »
В смысле кавычки расположить? В $params запихать этот массив?
В смысле да :) Ваш код просто не будет работать. Проверьте просто выводом print_r своего получившегося массива.
В $params это по вкусу.

Ну и по-поводу функции понятнее не стало :-\
Имя функции надо искать в wsdl, где-то в теге <operation name=...

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #6 : 12 Марта 2013, 13:49:02 »
Привел к виду:
$a="";
$b="";
$c="";
$client = new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl");

$result = $client->__soapCall("Get", array('DateTimeStart' => $a, 'DateTimeEnd' => $b, 'Card' => $c));
echo $result;
Вот что выдает:
(Нажмите, чтобы показать/скрыть)

То есть я так понимаю, что судя по всему, не передаются параметры...

Пользователь решил продолжить мысль 12 Марта 2013, 15:48:51:
Попробовал еще такой вариант:

$a="";
$b="12.02.2013 12:40:23";
$c="80100010";
$client = new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl", array("cache_wsdl" => 0));
$param = array('DateTimeStart' => $a, 'DateTimeEnd' => $b, 'Card' => $c);
//$result = $client->__soapCall("Get", $param);
$result = $client->Get($param);
echo $result;

Вот ошибка:

(Нажмите, чтобы показать/скрыть)


Пользователь решил продолжить мысль 12 Марта 2013, 16:11:33:
Делал вообще без параметров запрос (типа чтоб все вывалило, что есть). Вроде пошло! Но в темповый файл 38 гиг данных выгрузило и на этом сервер стал недоступен, так как места на диске С стало 0.

В общем вроде как теперь разобраться, как параметры правильно передать в норм формате, ну и реанимировать сервер ???

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 12 Марта 2013, 16:11:33 от drama17 »

Оффлайн Olzhas

  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
    • VK
Re: php soap client
« Ответ #7 : 12 Марта 2013, 17:04:29 »
А можно код функции get
Или выполни это
<?php
$client = new SoapClient('http://192.168.1.83/ws/cardflow.1cws?wsdl');
//echo "<pre>"; Форматирование можно включить
var_dump($client->__getFunctions());
//echo "</pre>"
?>
Lenovo G570 Ubuntu 13.04/Windows 7,8 [Intel Core i5][x64][Intel HD & AMD Radeon Graphics]

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #8 : 12 Марта 2013, 18:09:52 »
Я так понял, что не в том формате даю данные. У меня первый и воторй параметры должны быть dateTime.
Посмотрел как сделать это в ПХП, переделал скрипт:
$c="80100010";

    $date1 = "2011.03.20";
    $date1 = explode(".", $date1);

    $time1 = "07:16:17";
    $time1 = explode(":", $time1);

    $datetime1 = new DateTime();
    $datetime1->setDate($date1[0], $date1[1], $date1[2]);
    $datetime1->setTime($time1[0], $time1[1], $time1[2]);


    $date2 = "2012.03.20";
    $date2 = explode(".", $date2);

    $time2 = "07:16:17";
    $time2 = explode(":", $time2);

    $datetime2 = new DateTime();
    $datetime2->setDate($date2[0], $date2[1], $date2[2]);
    $datetime2->setTime($time2[0], $time2[1], $time2[2]);


//    print_r($datetime);
//print $datetime->format('d.m.Y s:i:H');


$client = new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl", array("cache_wsdl" => 0));
$param = array('DateTimeStart' => $datetime1->format('d.m.Y s:i:H'), 'DateTimeEnd' => $datetime2->format('d.m.Y s:i:H'), 'Card' => $c);
//$param = array();
//$result = $client->__soapCall("Get", $param);
$result = $client->Get($param);
echo $result;
Все равно выдает неверный формат :(
(Нажмите, чтобы показать/скрыть)

Оффлайн Olzhas

  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
    • VK
Re: php soap client
« Ответ #9 : 12 Марта 2013, 18:20:58 »
... я могу посмотреть название функции? ...

Попробуй
<?php print_r($client->__getFunctions()); ?>
Lenovo G570 Ubuntu 13.04/Windows 7,8 [Intel Core i5][x64][Intel HD & AMD Radeon Graphics]

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #10 : 12 Марта 2013, 18:51:49 »
Array
(
    [0] => GetResponse Get(Get $parameters)
    [1] => GetResponse Get(Get $parameters)
)

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
Re: php soap client
« Ответ #11 : 12 Марта 2013, 20:59:33 »
Я так понял, что не в том формате даю данные. У меня первый и воторй параметры должны быть dateTime.
Посмотрел как сделать это в ПХП, переделал скрипт:

В xml datetime совсем не php-шный: http://www.w3.org/TR/xmlschema-2/#dateTime
Вот так надо "0001-01-01T00:00:00"

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #12 : 13 Марта 2013, 13:05:55 »
Сделал так:
$a="2012-10-10T12:40:25";
$b="2013-03-13T12:40:23";
$c="80100010";
$client = new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl", array("cache_wsdl" => 0));
$param = array('DateTimeStart' => $a, 'DateTimeEnd' => $b, 'Card' => $c);
$result = $client->Get($param);
echo $result;

Выдает:
(Нажмите, чтобы показать/скрыть)
Посмотрел, что за модуль:
124      Обработка заполнения вызывается при создании нового документа
если это то (в 1С)


Пользователь решил продолжить мысль 13 Марта 2013, 13:55:39:
Убрал вообще третий параметр из массива (номер карты), типа чтоб по всем картам мне выбрало за период. после минутного колебания получил другую ошибку:
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 13 Марта 2013, 14:17:42:
Такое ощущение, что номер карты не как string передается...

Пользователь решил продолжить мысль 13 Марта 2013, 14:20:51:
Когда вписал в номер карты буквенное значение ([Card] => trust), получил ошибку:

PHP Catchable fatal error:  Object of class stdClass could not be converted to string
« Последнее редактирование: 13 Марта 2013, 14:20:51 от drama17 »

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
Re: php soap client
« Ответ #13 : 13 Марта 2013, 15:49:07 »
Такое ощущение, что номер карты не как string передается...
Можно же посмотреть что там передаётся: http://www.php.net/manual/en/soapclient.getlastrequest.php

Оффлайн drama17

  • Автор темы
  • Любитель
  • *
  • Сообщений: 66
    • Просмотр профиля
Re: php soap client
« Ответ #14 : 13 Марта 2013, 16:26:19 »
Все! Работает шикарно :)

Скрипт в таком виде:

<?php

$a
="2013-03-10T12:40:25";
$b="2013-03-13T12:40:25";
$c="90513456";

$client = new SoapClient("http://192.168.1.83/ws/cardflow.1cws?wsdl", array("cache_wsdl" => 0));
//print_r($client->__getFunctions());

$param = array('DateTimeStart' => $a'DateTimeEnd' => $b'Card' => $c);
//print_r($param);
$result $client->Get($param);
print_r($result);

?>


В паре строк кода 1С пришлось также подправить - ошибка была в том, что там был прописан адрес 127.0.0.1.

Так что теперь осталось это дело доработать, сделать функцию запихивания этого добра в БД и порядок.

Всем Большое Спасибо  ;)

 

Страница сгенерирована за 0.043 секунд. Запросов: 25.