Потребовалась реализация, но найти хоть одну работающую библиотеку не удалось. Все работающие работают только со своими серверами. Куда обращаться уже не знаю, уже свой велосипед согласен написать.
SOAP - модно, но только как его прикрутить я и спрашиваю. Вот неработающий, так как ошибки не выдаёт, но все ответы пустые (закрыто по ip, поэтому только почитать что я не так делаю). Код (Text): <?php $fp = stream_socket_client("epp.hostmaster.ua:700", $errno, $errstr, 5); if (!$fp) { echo $errstr.'('.$errno.')'; } else { echo 'Приветствие:'.fread($fp, 1024); }
Не стоит забывать, что так или иначе но это протокол, а значит есть и header, а он, насколько мне известно примерно 4 байта и содержит длину фрейма. Задача распаковать заголовк, получить длину фрейма и собственно считать данные. При передаче все тоже самое. Относительно SOAP читаем тут http://www.php.ru/manual/book.soap.html И главное усвойте, что данные передают/получают в формате XML. Читайте спецификацию протокола EPP Добавлено спустя 1 минуту 0 секунд : И да, тут следует указать протокол, вроде как EPP поверх TCP, значит либо tcp:// либо tls:// (SSL)
Спасибо, всё смог разобрать без SOAP, ибо на сервере его нет, но его включение дело на пару дней . XML уже парсится, всё работает, мне такое не впервой, но... Считал я Код (Text): fread($this->fp, 4) к примеру, и как мне его распоковать?
Ну как вариант так: Код (PHP): list(,$length) = unpack('N', fread($this->fp,4)); // ну а дальше $frame = fread($this->fp, ($length-4));
получилось хоть? а 'N' был взят так как логично предположить, что скорее всего длину фрейма хранят в unsigned long (от старшего к младшему), но могу и ошибаться .. вообщем дело тестов
Почти. Только отвечает как будто я ничего не слал через fwrite. А так всё тобой предложенное работает.
а упаковывал перед fwrite? Код (Text): fwrite($this->fp, pack('N', strlen($xmlContent)+4).$xmlContent); Насчёт русского в XML не забудь, а то и strlen будет корявый =)
Там только латиница будет. Сработало без ошибки только на это, но опять таки как будто ничего не слал. Код (Text): fwrite($this->fp, pack('n', strlen($xml)+4).$xml."\n"); Продолжаю танцевать с бубном.
а кстати, серв случаем не хочет получить собранный stream_context на тему всяких там сертификатов, passphrase и т.п.? http://www.php.ru/manual/function.stream-context-create.html
Сейчас так. Да и не отвечает он без сертификата вообще. Код (Text): $context = stream_context_create(); stream_context_set_option($context, 'ssl', 'local_cert', 'cert.pem'); stream_context_set_option($context, 'ssl', 'allow_self_signed', true); stream_context_set_option($context, 'ssl', 'verify_peer', false); $this->fp = stream_socket_client( 'ssl://'.self::$url.':'.self::$port, $this->errno, $this->errstr,30, STREAM_CLIENT_CONNECT, $context );
Показывает только то что слал и получил . Тоже самое. http://phpclub.ru/talk/threads/php-xml-epp-сервер.68414/ Вот ещё один страдалец.
Спасибо огромное, что помог разобраться. Остановиться можно было на fwrite($this->fp, pack('N', strlen($xml)+4).$xml); - пересбор php и дефолтовые параметры это сила :-D.