|
Вызов функции Web-сервис из PHP с параметрами (2) | ☑ | ||
---|---|---|---|---|
0
egor2fsys
13.07.11
✎
22:18
|
Прощу прощения за ранее созданную недотему :)
Итак, есть сервис, с методом Reserve, которому нужно передавать параметр, пытаюсь вызвать это дело на пхп, однако параметр у метода построен на основе wsdl описания из этого сервиса. Т.е. есть параметр - CamperList, у него внутри есть тип Camper, который имеет тип, структура которого показана чуть ниже. С 1с удается вызвать все нормально. Как на пхп описать корректную передачу сервису параметра на основе другого параметра ? Код на пхп примерно такой: $client = new SoapClient("http://127.0.0.1/RoomCategory/ws/Reserving.1cws?wsdl"); $a["Group"]=5; $a["Name"]="Ivanov Ivan Petrovich"; $a["BirdhDate"]="1983-01-02"; $a["Sex"]="m"; $a["LivingType"]=1; $a["RoomTypeCode"]="003"; $a["Date"]="2011-07-13"; $a["LivingTime"]=14; $res = $client->Reserve($a); Однако пхп вполне справедливо ругается: PHP Fatal error: SOAP-ERROR: Encoding: object hasn't 'CamperList' property in /var/www/html/ws2.php on line 25 SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'CamperList' property in /var/www/html/ws2.php:25 |
|||
1
egor2fsys
13.07.11
✎
22:20
|
К 1 сообщению:
Если вызвать echo print_r($client->__getFunctions(), true); то получим среди прочих [14] => ReserveResponse Reserve(Reserve $parameters) Теперь если вызвать echo print_r($client->__getFunctions(), true); то получим Array ( [0] => struct Camper { int Group; string Name; date BirdhDate; string Sex; int LivingType; string RoomTypeCode; date Date; int LivingTime; } [1] => struct CamperList { Camper Camper; } Т.е. в самом методе Reserve параметр является типом CamperList, но как его сконструировать в пхп чтобы корректно передать в метод ? |
|||
2
xReason
13.07.11
✎
23:05
|
здесь форум для кулинаров
вы ошиблись форумом |
|||
3
egor2fsys
13.07.11
✎
23:41
|
(2)
Спасибо, и вам вкусно приготовить тогда. |
|||
4
dzsysop
13.07.11
✎
23:53
|
Думаю проще будет объявить внутри метода много входных параметров,
но если очень хочется то надо копать вот в этом направлении: $a["Group"]=5; $a["Name"]="Ivanov Ivan Petrovich"; $a["BirdhDate"]="1983-01-02"; $a["Sex"]="m"; $a["LivingType"]=1; $a["RoomTypeCode"]="003"; $a["Date"]="2011-07-13"; $a["LivingTime"]=14; $param_1c = new SoapVar($a, SOAP_ENC_OBJECT); $res = $client->Reserve($param_1c); только, боюсь, овчинка выделки не стоит |
|||
5
egor2fsys
13.07.11
✎
23:56
|
Это я пробовал в первую очередь.
Однако там не массив, а тип на основе типа веб-сервиса. |
|||
6
SeraFim
14.07.11
✎
05:46
|
не совсем понял, но заметил одну фигню:
если в 1Ске в веб-сервисе есть функция с параметрами: функция СделатьЧтоТо(параметр1, параметр2) то в php нужно, чтобы массив параметров имел те же названия, что и параметры в функции. то есть: $a["параметр1"] = $param1; $a["параметр2"] = $param2; $result = $client -> СделатьЧтоТо($a); |
|||
7
egor2fsys
14.07.11
✎
08:08
|
(6) Ага, и так пробовал, все равно ругается на несоответствие типа параметра ...
|
|||
8
Fragster
гуру
14.07.11
✎
08:45
|
а чО за объект типа Reserve-то? может таки его надо совать?
|
|||
9
egor2fsys
14.07.11
✎
09:22
|
Это объект на основе описания веб-сервиса.
Т.е. сервисе есть функция Reserve с параметром CamperList. Внутри типа CamperList есть тип Camper, который в свою очередь состоит уже из простых типов. Так это выглядит внутри описания: <xs:complexType name="Camper"> <xs:sequence> <xs:element name="Group" type="xs:int"/> <xs:element name="Name" type="xs:string" nillable="true"/> <xs:element name="BirdhDate" type="xs:date" nillable="true"/> <xs:element name="Sex" type="xs:string"/> <xs:element name="LivingType" type="xs:int"/> <xs:element name="RoomTypeCode" type="xs:string"/> <xs:element name="Date" type="xs:date"/> <xs:element name="LivingTime" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:complexType name="CamperList"> <xs:sequence> <xs:element name="Camper" type="tns:Camper" maxOccurs="999"/> </xs:sequence> </xs:complexType> |
|||
10
Fragster
гуру
14.07.11
✎
09:51
|
(9) просто из (1) следует, что функция хочет именно объект такого типа, а не массив
|
|||
11
egor2fsys
14.07.11
✎
10:17
|
(10) А как ей в пхп передать объект нужного типа ?
|
|||
12
Fragster
гуру
14.07.11
✎
10:30
|
$var = new Reserve;
или вызвать функцию, которая его создает |
|||
13
nbIx
14.07.11
✎
10:39
|
(0) Можно вопросик.
А как вы авторизуетесь? |
|||
14
SeraFim
14.07.11
✎
14:18
|
$client = new SoapClient("some.wsdl", array('login' => "some_name", 'password' => "some_password"));
|
|||
15
egor2fsys
14.07.11
✎
17:12
|
База без авторизации. А вообще или прописываем в vrd файл или как показали в (14).
|
|||
16
Fragster
гуру
14.07.11
✎
18:25
|
так (10) - правда, али нет?
|
|||
17
egor2fsys
14.07.11
✎
18:29
|
Получается да.
Но как в пхп создать этот объект ? |
|||
18
Fragster
гуру
14.07.11
✎
18:43
|
а если
$client = new SoapClient("http://127.0.0.1/RoomCategory/ws/Reserving.1cws?wsdl"); $a["Group"]=5; $a["Name"]="Ivanov Ivan Petrovich"; $a["BirdhDate"]="1983-01-02"; $a["Sex"]="m"; $a["LivingType"]=1; $a["RoomTypeCode"]="003"; $a["Date"]="2011-07-13"; $a["LivingTime"]=14; $b["CamperList"][]=$a $res = $client->Reserve($b); |
|||
19
Fragster
гуру
14.07.11
✎
18:44
|
wsdl полностью б
|
|||
20
egor2fsys
14.07.11
✎
18:45
|
а можно как то в асечку или на почту ?
|
|||
21
egor2fsys
14.07.11
✎
19:13
|
(18) Спасибо !
То, что нужно ! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |