The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.