Передача параметров в Soap

Статус
В этой теме нельзя размещать новые ответы.

LOB

Новичок
Существует веб сервис который на своей стороне принимает 4-х байтовый массив.

На моей стороне сгенерированный класс на основе веб-сервиса, показывает что надо передавать значение в base64Binary. Смотрите класс ниже

PHP:
class InetAddressInfo {
	/**
	 * @access public
	 * @var base64Binary
	 */
	public $address;
}
Вопрос каким образом можно передать массив в base64Binary ?
Массив должен содержать IP адресс в ввиде 4-х байтового массива.
 

LOB

Новичок
Потому что я знаю, что на той стороне принимает Веб-сервис. Я общался с разработчиком по этому поводу.

PHP:
public static final byte[] EMPTY_ADDRESS = new byte[0];
Вот Java код на другой стороне
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я тебе очень сочувствую, но SOAP в PHP - это засада :(
думаю, решение надо искать через сниффинг валидного запроса и попытку подбора параметров на PHP,
иногда решать приходится через SimpleXML и Curl.

если разработчику на другой стороне надо, чтобы с ним работали клиенты на PHP, ему придется написать все на совместимых типах
 

Krishna

Продался Java
LOB
Надо не с разработчиком Java общаться, а смотреть WSDL, который суть последняя инстанция.
 

LOB

Новичок
Вот адрес веб сервиса WSDL может это вам о чем нибудь скажет.
ссылка

вот интересующий момент:
PHP:
<complexType name="InetAddressInfo">
−
<sequence>
<element name="address" type="base64Binary"/>
</sequence>
</complexType>
Неужели нет способа передавать такие данные из пхп. Я уже пробовал и серилизовать массив и его заинкодиным передавать.
Или остается единственный вариант, просить разработчика, поменять тип, на другой и оставить обработку на его плечи.
 

Breeze

goshogun
Команда форума
Партнер клуба
что показывает SoapClient при включенном трейсе?
основываясь на wsdl, он должен передавать параметр в типе base64Binary.
в конце концов base64Binary всего лишь бинарник, закодированный base64, в данном случае 4 байта ip.
 

LOB

Новичок
Да всего лишь бинарник, но как именно передать закодированный массив 4-х вот в этом собственно и заключается вопрос(

Не знаю скажет ли вам о чем нибудь трейс
PHP:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mnenie.kz/RespondentsCommon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:Authenticate><AuthenticateRequestData_1 xsi:type="ns1:AuthenticateRequestData"><member xsi:type="ns1:MemberDescriptorInfo"/><credentials xsi:type="ns1:WebServiceCredentials"><applicationKey xsi:type="xsd:string"></applicationKey><passwordHash xsi:type="xsd:string"></passwordHash><requestDate xsi:type="xsd:dateTime">2011-02-26T01:58:58-00:00</requestDate></credentials><inetAddress xsi:type="ns1:InetAddressInfo"><address xsi:type="xsd:base64Binary">QXJyYXk=</address></inetAddress><localeCode xsi:type="xsd:string">RUS</localeCode><memberCredentials xsi:type="ns1:MemberCredentialsInfo"><email xsi:type="xsd:string">[email protected]</email><password xsi:type="xsd:string">123123</password></memberCredentials></AuthenticateRequestData_1></ns1:Authenticate></SOAP-ENV:Body></SOAP-ENV:Envelope>
 

Breeze

goshogun
Команда форума
Партнер клуба
скажет, нужно передавать не Array, а строку с 4-мя байтами ip-адреса
 

LOB

Новичок
Объясните пожалуйста как вы это поняли. Как именно должна передаваться строка ? Что то я не понимаю (
 

Breeze

goshogun
Команда форума
Партнер клуба
<address xsi:type="xsd:base64Binary">QXJyYXk=</address>
QXJyYXk= есть слово Array, значит передается массив, который приводится к строке
а уж что в строке должно быть, тебе выяснять.
может ip2long(), может decbin(ip2long()), а может еще что.
 

LOB

Новичок
Спасибо за информацию, но самая суть осталось открытой, Как правильно это сделать.
Буду пробовать может все таки получиться, каким то образом передать данные
 

Активист

Активист
Команда форума
> думаю, решение надо искать через сниффинг валидного
> запроса и попытку подбора параметров на PHP,
> иногда решать приходится через SimpleXML и Curl.
Тяжелая неделя? Где такую же траву достать?

Breeze
Какой decbin, bindec? Один и тот же дилер?

> Как правильно это сделать.
Учить матан.

Сколько байт занимает IPv4 адрес ? Что такое 192.168.0.1? (это числовое представление 4-х байт в 10-ой системе счисления, разделенная точками для удобочитаемости). Что такое ASCII таблица символов? Что такое вообще символ в ASCII? Начнем с того, что такое вообще байт? А еще ответь - сколько занимает IP адерс в пакетах tcp/ip - ты наивно полагаешь, что он там передается через точки?

PHP:
<?php
$x = chr(192).chr(168).chr(0).chr(1);
echo "Binary: {$x} (size: ".strlen($x).") base64: ".base64_encode($x);
echo "<br>";
$bin = "0xc0a80001"; // ipv4, 192.168.0.1;
echo dechex(ip2long("192.168.0.1")). "=".$bin." !<br>Binary pack: ".pack("N", ip2long("192.168.0.1"))." (обратый порядок байтов. Здесь указан лишь для того, что бы показать как что работает! Не применять, N - есть unsiged long, а результат - ip2long - есть signed long!)"."<br>Binary pack: ".pack("l", ip2long("192.168.0.1"))." (машинный порядок байтов)";;
echo "<br>";
echo (int)0xc0a80001." ".ip2long("192.168.0.1");
?>
Result:
Код:
Binary: АЁ� (size: 4) base64: wKgAAQ==
c0a80001=0xc0a80001 !
Binary pack: АЁ� (обратый порядок байтов. Здесь указан лишь для того, что бы показать как что работает! Не применять, N - есть unsiged long, а результат - ip2long - есть signed long!)
Binary pack: �ЁА (машинный порядок байтов)
-1062731775 -1062731775

Сколько пива я заработал?
 

LOB

Новичок
Активист
Сколько пива я заработал?
К сожалению пока не помогло, попросил, чтобы мне выводили обратно, что приходит от меня для более ясно ситуации, думаю, это поможет решить задачу.
Но все равно спасибо. Да, к сожалению часто нужен ликбез Вы правы!
 

NBAH1990

Новичок
Активист


К сожалению пока не помогло, попросил, чтобы мне выводили обратно, что приходит от меня для более ясно ситуации, думаю, это поможет решить задачу.
Но все равно спасибо. Да, к сожалению часто нужен ликбез Вы правы!
Так чем всё завершилось то? Как через соап передавать base64Binary? Расскажите пожалуйста. Столкнулся с той же проблемой только передавать надо файл. До этого генерировал wsdl и скармливал соапу. Всё было хорошо, пока не столкнулся с этим типом.
 

MiksIr

miksir@home:~$
Так чем всё завершилось то? Как через соап передавать base64Binary? Расскажите пожалуйста. Столкнулся с той же проблемой только передавать надо файл. До этого генерировал wsdl и скармливал соапу. Всё было хорошо, пока не столкнулся с этим типом.
http://php.net/manual/ru/function.base64-encode.php
У топикстартера другая проблема была.
 

NBAH1990

Новичок
Может кому-то пригодится. В общем ничего сложного не было. В тэг где должен быть тип base64Binary нужно положить base64encode($file_content), что я и делал. Проблема была в ошибке в структуре - лишний тег вписывал.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху