EPP och PHP Det finns flera olika klienter där ute för att hantera epp. Net_EPP_client.php phpsrs Hanterar bara EPP kommunikationen. Enkel http://labs.centralnic.com/net_epp_client.php Mer komplett Klarar inte ssl http://sourceforge.net/projects/phpsrs Openepp Ser ganska komplett ut Alla kommentarer och texter på rysska http://www.epp.org.ua/downloads Jag valde att använda Net-EPP_client.php från centralnic för att komma igång. Installera Net_EPP_Client & PHP Ladda hem från http://labs.centralnic.com/net_epp_client.php Packa upp Kopiera Net/EPP/Client.php Editera Client.php rad 29 /* $GLOBALS[Net_EPP_Client_Version] = '0.0.3'; */ För att få PHP att fungera med XML stöd behövs paketer php-xml installeras, i alla fall om man kör RedHat EL5 eller CentOS 5.2. När detta är gjort kan msg.php köras givetvis efter det att ni editerat user and password. Exemplet är det samma som i dom andra språken, dvs det loggar in. Talar om om det finns några meddelande in kön, och om det finns det så hämtar programmet hem det första meddelande och visar en del information om medlenade. OBS!! Exemplet gör inte ACK på meddelande så detta ligger kvar i kön.
#!/usr/bin/php # <?php require('./client.php'); // To change $host = 'epptest.iis.se'; $port = 700; $timeout = 10; $ssl = true; $EPP_USER = 'test'; $EPP_PWD = '1234abcdefghijkl'; // Defines // define( 'XMLNS_EPP', 'urn:ietf:params:xml:ns:epp-1.0' ); define( 'XSCHEMA_EPP', 'urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd' ); define( 'XMLNS_XSCHEMA', 'http://www.w3.org/2001/xmlschema-instance' ); define( 'XSCHEMA_DOMAIN', 'urn:ietf:params:xml:ns:domain-1.0' ); define( 'XSCHEMA_CONTACT', 'urn:ietf:params:xml:ns:contact-1.0' ); define( 'XSCHEMA_HOST', 'urn:ietf:params:xml:ns:host-1.0' ); define( 'XSCHEMA_EXTDNSSEC', 'urn:ietf:params:xml:ns:secdns-1.0' ); define( 'XSCHEMA_EXTIIS', 'urn:se:iis:xml:epp:iis-1.0' ); function xmlcreateattribute( $doc, $attrname, $attrvalue ) { $attr = $doc->createattribute( $attrname ); $attr->nodevalue = $attrvalue; return $attr; function eppresultparse( $xml ) { $node = new DOMDocument; if ( @$node->loadxml( $xml ) == false ) { print "Parse error\n"; exit(1); $xpath = new DOMXPath( $node ); $xpath->registernamespace( 'epp', XMLNS_EPP ); $xpath->registernamespace( 'con', XSCHEMA_CONTACT ); $xpath->registernamespace( 'dom', XSCHEMA_DOMAIN ); $xpath->registernamespace( 'hos', XSCHEMA_HOST ); $xpath->registernamespace( 'iis', XSCHEMA_EXTIIS ); $xpath->registernamespace( 'secdns', XSCHEMA_EXTDNSSEC ); return $xpath; // Main //
//- Connect to server ------------------------------------------------------- $epp = new Net_EPP_Client; $greeting = $epp->connect($host, $port, $timeout, $ssl); $xpath = eppresultparse( $greeting ); $svid = $xpath->query( '/epp:epp/epp:greeting/epp:svid/text()' )->item(0)- print "Connected to server ".$svid."\n"; //- Create the login xml ---------------------------------------------------- $doc = new DOMDocument("1.0", "UTF-8"); #$doc->formatoutput = true; $doc->standalone = false; // Build the root $root = $doc->appendchild( $doc->createelement( 'epp' ) ); $root->appendchild( xmlcreateattribute( $doc, 'xmlns', XMLNS_EPP ) ); $root->appendchild( xmlcreateattribute( $doc, 'xmlns:xsi', XMLNS_XSCHEMA ) ); $root->appendchild( xmlcreateattribute( $doc, 'xsi:schemalocation', XSCHEMA_EPP ) ); $doc->appendchild( $root ); // Build the command $cmd = $root->appendchild( $doc->createelement( 'command' ) ); $login = $cmd->appendchild( $doc->createelement( 'login' ) ); $login->appendchild( $doc->createelement( 'clid', $EPP_USER ) ); $login->appendchild( $doc->createelement( 'pw', $EPP_PWD ) ); $opts = $login->appendchild( $doc->createelement( 'options' ) ); $opts->appendchild( $doc->createelement( 'version', '1.0' ) ); $opts->appendchild( $doc->createelement( 'lang', 'en' ) ); $svcs = $login->appendchild( $doc->createelement( 'svcs' ) ); $svcs->appendchild( $doc->createelement( 'objuri', XSCHEMA_DOMAIN ) ); $svcs->appendchild( $doc->createelement( 'objuri', XSCHEMA_CONTACT ) ); $svcs->appendchild( $doc->createelement( 'objuri', XSCHEMA_HOST ) ); $svcx = $svcs->appendchild( $doc->createelement( 'svcextension' ) ); $svcx->appendchild( $doc->createelement( 'exturi', XSCHEMA_EXTDNSSEC ) ); $svcx->appendchild( $doc->createelement( 'exturi', XSCHEMA_EXTIIS ) ); $clienttran = "PHP-". gmstrftime('%y%m%dt%h%m%sz'). "-". getmypid(); $cmd->appendchild( $doc->createelement( 'cltrid', $clienttran ) ); $login = $doc->savexml(); $epp->sendframe($login); //- Check responses --------------------------------------------------------- $answer = $epp->getframe(); $xpath = eppresultparse( $answer ); $rescode = $xpath->query( '/epp:epp/epp:response/epp:result/@code' )->item(0)- if ($rescode!= 1000) { $msg = $xpath->query( '/epp:epp/epp:response/epp:result/epp:msg/text()' )- print "Login Fail - Code ".$rescode." - ".$msg."\n"; else { $msgq = $xpath->query( '/epp:epp/epp:response/epp:msgq/@count' )->item(0)-
if ($msgq!= 0) { $msgid = $xpath->query( '/epp:epp/epp:response/epp:msgq/@id' )- print "You have ".$msgq." message in queue - first id is ".$msgid."\n"; ------ //- Create the poll xml ----------------------------------------------- $doc = new DOMDocument("1.0", "UTF-8"); $doc->formatoutput = true; $doc->standalone = false; // Build the root $root = $doc->appendchild( $doc->createelement( 'epp' ) ); $root->appendchild( xmlcreateattribute( $doc, 'xmlns', XMLNS_EPP ) ); $root->appendchild( xmlcreateattribute( $doc, 'xmlns:xsi', XMLNS_XSCHEMA ) ); $root->appendchild( xmlcreateattribute( $doc, 'xsi:schemalocation', XSCHEMA_EPP ) ); $doc->appendchild( $root ); // Build the command $cmd = $root->appendchild( $doc->createelement( 'command' ) ); $poll = $cmd->appendchild( $doc->createelement( 'poll' ) ); $poll->appendchild( xmlcreateattribute( $doc, 'op', 'req' ) ); $clienttran = "PHP-". gmstrftime('%y%m%dt%h%m%sz'). "-". getmypid(); $cmd->appendchild( $doc->createelement( 'cltrid', $clienttran ) ); $poll = $doc->savexml(); $epp->sendframe($poll); //- Check responses --------------------------------------------------- ------ $answer = $epp->getframe(); $xpath = eppresultparse( $answer ); $rescode = $xpath->query( '/epp:epp/epp:response/epp:result/@code' )- $msg = $xpath->query( '/epp:epp/epp:response/epp:result/epp:msg/text()' )- print "Msg - Code ".$rescode." - ".$msg."\n"; //- Get message ------------------------------------------------------- ------ $qdate = $xpath->query( '/epp:epp/epp:response/epp:msgq/epp:qdate' )- $svtrid = $xpath->query( '/epp:epp/epp:response/epp:trid/epp:svtrid' )- print ("qdate: ".$qdate."\n"); print ("svtrid: ".$svtrid."\n"); $name = $xpath->evaluate( 'name(/epp:epp/epp:response/epp:resdata/*[1])' ); switch ($name) { case 'iis:createnotify': print ("Message type: Create\n"); $node = ':infdata/'; case 'iis:updatenotify': print ("Message type: Update\n"); $node = ':infdata/'; case 'iis:deletenotify':
print ("Message type: Delete\n"); $node = ''; case 'iis:transfernotify': print ("Message type: Transfer\n"); $node = ':trndata/'; default: print ("Unknown type: ".$name."\n"); $type = $xpath->evaluate( 'name(/epp:epp/epp:response/epp:resdata/'.$name.'[1]/*[1])' ); switch (substr($type,0,3)) { case 'dom': print ("Object type: domain\n"); if (strlen($node)!= 0) $node = 'dom'.$node; $node2 = 'dom:name'; case 'hos': print ("Object type: host\n"); if (strlen($node)!= 0) $node = 'hos'.$node; $node2 = 'hos:name'; case 'con': print ("Object type: contact\n"); if (strlen($node)!= 0) $node = 'con'.$node; $node2 = 'con:id'; default: print ("Unknown objtype: ".$name."\n"); $query = '/epp:epp/epp:response/epp:resdata/'.$name.'[1]/'.$node.$node2; $id = $xpath->query( $query )- print ("Object ID: ".$id."\n"); else { print "No message in queue\n"; //- Create the logout xml --------------------------------------------------- $doc = new DOMDocument("1.0", "UTF-8"); #$doc->formatoutput = true; $doc->standalone = false; // Build the root $root = $doc->appendchild( $doc->createelement( 'epp' ) ); $root->appendchild( xmlcreateattribute( $doc, 'xmlns', XMLNS_EPP ) ); $root->appendchild( xmlcreateattribute( $doc, 'xmlns:xsi', XMLNS_XSCHEMA ) ); $root->appendchild( xmlcreateattribute( $doc, 'xsi:schemalocation', XSCHEMA_EPP ) ); $doc->appendchild( $root ); // Create the command $cmd = $root->appendchild( $doc->createelement( 'command' ) ); $cmd->appendchild( $doc->createelement( 'logout' ) ); $clienttran = "PHP-". gmstrftime('%y%m%dt%h%m%sz'). "-". getmypid(); $cmd->appendchild( $doc->createelement( 'cltrid', $clienttran ) );
$logout = $doc->savexml(); $epp->sendframe($logout); //- Check responses --------------------------------------------------------- $answer = $epp->getframe(); $xpath = eppresultparse( $answer ); $rescode = $xpath->query( '/epp:epp/epp:response/epp:result/@code' )->item(0)- if ($rescode!= 1500) { $msg = $xpath->query( '/epp:epp/epp:response/epp:result/epp:msg/text()' )- print "Logout Fail - Code ".$rescode." - ".$msg."\n"; else { $msg = $xpath->query( '/epp:epp/epp:response/epp:result/epp:msg/text()' )- print "Logout Result code ".$rescode." - ".$msg."\n"; //- Dissconnct -------------------------------------------------------------- $epp->disconnect();?>