Я пытаюсь использовать библиотеку CentralNic PHP EPP для взаимодействия с Nominet EPP.Центральная библиотека PHP EPP - логин
Это ясно, как genrate командных кадров, используя Net_EPP_Frame_Command класса Например,
$frame = new Net_EPP_Frame_Command("check", "host");
$frame->addObjectProperty("name", "ns1.example.com");
$frame->addObjectProperty("name", "ns2.example.com");
$frame->addObjectProperty("name", "ns3.example.com");
$client->sendFrame($frame->saveXML());
В результате
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<host:check xmlns:host="urn:ietf:params:xml:ns:host-1.0">
<host:name>ns1.example.com</host:name>
<host:name>ns2.example.com</host:name>
<host:name>ns3.example.com</host:name>
</host:check>
</check>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
Каких именно то, что мне нужно. Единственная проблема заключается в том, что я не в состоянии генерировать логин кадр, который должен выглядеть подобно
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<login>
<clID>ClientX</clID>
<pw>foo-BAR2</pw>
<newPW>bar-FOO2</newPW>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<svcs>
<objURI>urn:ietf:params:xml:ns:obj1</objURI>
<objURI>urn:ietf:params:xml:ns:obj2</objURI>
<objURI>urn:ietf:params:xml:ns:obj3</objURI>
<svcExtension>
<extURI>http://custom/obj1ext-1.0</extURI>
</svcExtension>
</svcs>
</login>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
Не могли бы вы направить меня в правильном направлении?
Спасибо
Я отредактировал https://github.com/centralnic/php-epp/blob/master/Net/EPP/Frame/Command.php Добавляя еще две функции класса
function setParam($param, $value)
{
$this->$param->appendChild($this->createTextNode($value));
//$this->$param->setAttribute($param, $value);
}
function addElement($name, $value, $parentNode)
{
$element = $this->createElement($name);
$element->appendChild($this->createTextNode($value));
$this->$parentNode->appendChild($element);
}
То, как я использую сейчас:
public function login($clid, $pw)
{
$frame = $this->buildLoginFrame($clid, $pw);
$this->client->sendFrame($frame->saveXML());
print_r($frame->friendly());
print_r($this->client->getFrame());
}
private function buildLoginFrame($clid, $pw)
{
$frame = new Net_EPP_Frame_Command_Login();
$frame->setParam("clID", $clid);
$frame->setParam("pw", $pw);
$frame->setParam("eppVersion", self::VERSION);
$frame->setParam("eppLang", self::LANG);
$frame->addElement("objURI", "urn:ietf:params:xml:ns:contact-1.0", "svcs");
$frame->addElement("objURI", "urn:ietf:params:xml:ns:domain-1.0", "svcs");
$frame->addElement("objURI", "urn:ietf:params:xml:ns:host-1.0", "svcs");
$frame->setParam("clTRID", $this->clTRID);
return $frame;
}
Окончательный вариант, который кажется лучшим в нынешней ситуации
class EPPHelper
{
static function setParam($frame, $param, $value)
{
$frame->$param->appendChild($frame->createTextNode($value));
}
public function addElement($frame, $name, $value, $parentNode)
{
$element = $frame->createElement($name);
$element->appendChild($frame->createTextNode($value));
$parentNode->appendChild($element);
}
}
}
...
public function login($clid, $pw)
{
$frame = $this->buildLoginFrame($clid, $pw);
$this->client->sendFrame($frame->saveXML());
print_r($frame->friendly());
print_r($this->client->getFrame());
}
private function buildLoginFrame($clid, $pw)
{
$frame = new Net_EPP_Frame_Command_Login();
//$frame->setParam("clID", $clid);
EPPHelper::setParam($frame, "clID", $clid);
EPPHelper::setParam($frame, "pw", $pw);
EPPHelper::setParam($frame, "eppVersion", self::VERSION);
EPPHelper::setParam($frame, "eppLang", self::LANG);
EPPHelper::addElement($frame, "objURI", "urn:ietf:params:xml:ns:contact-1.0", $frame->svcs);
EPPHelper::addElement($frame, "objURI", "urn:ietf:params:xml:ns:domain-1.0", $frame->svcs);
EPPHelper::addElement($frame, "objURI", "urn:ietf:params:xml:ns:host-1.0", $frame->svcs);
EPPHelper::setParam($frame, "clTRID", $this->clTRID);
return $frame;
}
Что содержит документация этой библиотеки о логине? Кажется, для него есть специальный класс: https://github.com/centralnic/php-epp/blob/master/Net/EPP/Frame/Command/Login.php – hakre
Я боюсь, что в сети нет документации бы то ни было. Мне пришлось изменить файл Login.php в соответствии с моими потребностями, а также удалить debug_log в строке # 32 в Command.php. Кажется, что сам проект действительно сырой и требует много исправления. Мне удалось создать фрейм, но я не уверен, что так оно и должно было быть сделано. Если кому-то интересно, я могу опубликовать обходной путь –
Вам не нужно. Он работает так же, как и класс, описанный выше. Поскольку 'svcs' является DOMElement, вы можете просто добавить дочерние узлы к вашим потребностям, даже если эти более сложные свойства выглядят. Возможно, вы захотите добавить код, в который вы редактировали свой вопрос (разделите его на строку), должно быть легко дать несколько лучших предложений о том, как это используется. См. Также: http://php.net/book.dom - это базовая библиотека CentralNic PHP EPP построена поверх. – hakre