NAME

IO::EPP::RIPN

SYNOPSIS

use IO::EPP::RIPN;

# 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.