From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

IO::EPP::RIPN

SYNOPSIS

# Parameters for LWP
my %sock_params = (
PeerHost => 'uap.tcinet.ru',
PeerPort => 8028, # 8027 for .SU, 8028 for .RU, 8029 for .РФ
SSL_key_file => 'key_file.pem',
SSL_cert_file => 'cert_file.pem',
LocalAddr => '1.2.3.4',
Timeout => 30,
);
# Create object, get greeting and call login()
my $conn = IO::EPP::RIPN->new( {
user => 'XXX-RU',
pass => 'XXXXXXXX',
sock_params => \%sock_params,
test_mode => 0, # real connect
} );
# Check domain
my ( $answ, $code, $msg ) = $conn->check_domains( { domains => [ 'my.ru', 'out.ru' ] } );
# Call logout() and destroy object
undef $conn;

DESCRIPTION

RIPN is the first organization the registry in the .ru tld. Then it transferred functions of the registry into TCI, but all special headings in epp remained

Examlpe:

xsi:schemaLocation="http://www.ripn.net/epp/ripn-epp-1.0 ripn-epp-1.0.xsd" instead of xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd"

Module overwrites IO::EPP::Base where there are differences from RFC and work with tcinet epp using http api.

For details see: https://tcinet.ru/documents/RU-RF/TechRules.pdf, https://tcinet.ru/documents/RU-RF/P2_RIPN-EPP.pdf, https://tcinet.ru/documents/SU/SUTechRules.pdf, https://tcinet.ru/documents/SU/SU_P2_RipnEPP.pdf.

All documents -- https://tcinet.ru/documents/.

IO::EPP::RIPN only works with .RU, .SU & .РФ cctlds.

For work with the new gtlds .ДЕТИ, .TATAR need use IO::EPP::TCI.

Features:

Working over https;

Completely other contacts;

Non-standard domain transfer in the .su zone;

The domain:check function has an error: when checking the availability of a blocked domain, it responds that it is available. The list of blocked domains should be downloaded from the Registrar panel.

METHODS

new

If the alien_conn parameter is received, it loads cookies from the file specified by load_cook_from

login

Ext params for login,

INPUT: new password for change

save_cookies

Save http connection cookies, they can be used to create another connection on this IP address without opening a new session, that is, without a login

hello

For details, see "hello" in IO::EPP::Base

cont_to_xml

Overrides the base class converter, since the contacts are very different here.

create_contact

Parameter names are maximally unified with other providers.

INPUT:

for individual:

name — full name, need for int and loc types;

birthday — date of birth;

passport — identification card number, place and date of issue;

for legal entity:

org — organization name

addr — string or array with full legal address of the organization, need for legal type data

common fields:

addr — string or array with full address;

TIN - taxpayer numbers;

phone – string or array with phone numbers in international format, you can specify a list of multiple phones, the suffixes (sms) and (transfer) are used to mark phones for confirming transfers;

fax – string or array with faxes, usually only required for legal entities;

email;

verified – the full name or name of the organization was confirmed by documents.

Examples:

Create person contact

my %pers = (
cont_id => 'MY-123456',
'int' => {
name => 'Igor I Igover',
addr => 'UA, 12345, Igorevsk, Igoreva str, 13',
},
loc => {.
name => 'Игорь Игоревич Игорев',.
addr => [ 'UA', '85012', 'Игоревск', 'ул. Игорева, д.12, Игореву И.И.' ],
},
TIN => '',
birthday => '2001-01-01',
passport => [ 'II662244', 'выдан Игоревским МВД УДМС', '1.1.2017' ],
phone => '+380.501234567',
fax => '',
email => 'mail@igor.name',
);
my ( $answ, $code, $msg ) = $conn->create_contact( \%pers );
# answer
{
'cont_id' => 'my-123456',
'cre_date' => '2020-01-11 10:10:10',
'cltrid' => '1710de82a0e9249277ffd713f51c8888',
'svtrid' => '4997598888'
};

Create legal entity contact

my %org = (
# cont_id - auto
'int' => {.
org => 'Igor Limited Liability Company',
addr => [ 'RU', '123456', 'Moscow', 'Igoreva str, 3', 'Igor LLC' ]
},
loc => {
org => 'ООО «Игорь»',
addr => [ 'RU, 123456, г. Москва, ул. Игорева, дом 3, ООО «Игорь»', 'охраннику' ],
},
legal => {.
addr => [ '125476, г.Москва, ул. Игорева, д.3' ],
},
TIN => '7777777777',
phone => [ '+7.4951111111', '+7.4951111111(transfer)' ],
fax => '+7.4951111111',
email => [ 'mail@igor.ru' ],
);
my ( $answ, $code, $msg ) = $conn->create_contact( \%org );
# answer
{
'cont_id' => 'e88c1fngsz1e',
'cre_date' => '2020-01-01 10:10:10',
'cltrid' => '6194b816dd3f5d3f417fd2cfe0c88888',
'svtrid' => '4997633333'
};

cont_from_xml

Overrides the base class contact parser.

As a result, the get_contact_info function displays the request response in the registry as follows:

Individual

my ( $a, $m, $o ) = make_request( 'get_contact_info', { cont_id => 'my-123456' } );
# answer
{
'msg' => 'Command completed successfully',
'owner' => 'XXX-RU',
'int' => {
'name' => 'Igor I Igover',
'addr' => [
'UA, 12345, Igorevsk, Igoreva str, 13'
]
},
'cre_date' => '2020-01-10 10:10:10',
'phone' => [
'+380.501234567'
],
'email' => [
'mail@igor.name'
],
'loc' => {
'name' => 'Игорь Игоревич Игорев',
'addr' => [
'UA',
'85012',
'Игоревск',
'ул. Игорева, д.12, Игореву И.И.'
]
},
'fax' => [],
'creater' => 'XXX-RU',
'verified' => 0,
'statuses' => {
'ok' => '+'
},
'birthday' => '2001-01-01',
'passport' => [
'II662244',
'выдан Игоревским МВД УДМС',
'1.1.2017'
],
'code' => '1000'
};

Legal entity

my ( $a, $m, $o ) = make_request( 'get_contact_info', { cont_id => 'e88c1fngsz1e' } );
# answer
{
'msg' => 'Command completed successfully',
'owner' => 'XXX-RU',
'int' => {
'org' => 'Igor Limited Liability Company',
'addr' => [
'RU',
'123456',
'Moscow',
'Igoreva str, 3',
'Igor LLC'
]
},
'cre_date' => '2020-01-10 10:10:10',
'phone' => [
'+7.4951111111',
'+7.4951111111(transfer)'
],
'email' => [
'mail@igor.ru'
],
'loc' => {
'org' => 'ООО «Игорь»',
'addr' => [
'RU, 123456, г. Москва, ул. Игорева, дом 3, ООО «Игорь»',
'охраннику'
]
},
'fax' => [
'+7.4951111111'
],
'legal' => {
'addr' => [
'125476, г.Москва, ул. Игорева, д.3'
]
},
'creater' => 'XXX-RU',
'verified' => 0,
'statuses' => {
'ok' => '+'
},
'code' => '1000'
};

transfer

Addition parameter for .SU, .NET.RU, .ORG.RU, .PP.RU: sent_to - registrar name which will receive the domain (here all on the contrary)

get_registrar_info

Get Registrar data: white IP, email, whois data

update_registrar

Changing Registrar data: white IP, email, whois data

INPUT:

key of params:

add or rem:

ips -- arrayref of ipv4 or ipv6 address,

emails - hashref where keys - email type, values - email

chg:

www - new web url

whois - new whois url

get_billing_info

INPUT:

keys of params:

date,

period: in days,

currency: RUB.

get_limits_info

How many requests are left in this hour

get_stat_info

Show domain statistics by metric

key of params: metric -- varians: domain, domain_pending_transfer, domain_pending_delete, contact, host, all

Now not work:

code="2400", msg="Command failed", reason="Internal server error"

logout

Close session, disconnect

AUTHORS

Vadim Likhota <vadiml@cpan.org>

COPYRIGHT

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.