The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

NAME

WWW::eNom::Contact - Representation of eNom Contact

SYNOPSIS

use strict;
my $api = WWW::eNom->new( ... );
my $contact = WWW::eNom::Contact->new( ... );
# New Contact Object
my $contact = WWW::eNom::Contact->new(
first_name => 'Ada',
last_name => 'Byron',
organization_name => 'Lovelace', # Optional
job_title => 'Countess', # Optional if no organization_name, otherwise required
address1 => 'University of London',
address2 => 'Analytical Engine Dept', # Optional
city => 'London',
#state => 'Texas', # Optional, primarily used for US Contacts
country => 'GB',
zipcode => 'WC1E 7HU',
email => 'ada.byron@lovelace.com',
phone_number => '18005551212',
fax_number => '18005551212', # Optional if no organization_name, otherwise required
);
# Contact Creation
my $registrant_contact_creation_payload = $contact->construct_creation_request('Registrant');
my $admin_contact_creation_payload = $contact->construct_creation_request('Admin');
my $technical_contact_creation_payload = $contact->construct_creation_request('Tech');
my $billing_contact_creation_payload = $contact->construct_creation_request('AuxBilling');
my $response = $api->submit({
method => 'Purchase',
params => {
...,
%{ $registrant_contact_creation_payload },
%{ $admin_contact_creation_payload },
%{ $technical_contact_creation_payload },
%{ $billing_contact_creation_payload },
}
});
# Contact Retrieval
my $response = $self->submit({
method => 'GetContacts',
params => {
Domain => $domain_name
}
});
my $contacts;
for my $contact_type (qw( Registrant Admin Tech AuxBilling )) {
my $raw_contact_response = $response->{GetContacts}{$contact_type};
my $common_contact_response;
for my $field ( keys %{ $raw_contact_response } ) {
if( $field !~ m/$contact_type/ ) {
next;
}
$common_contact_response->{ substr( $field, length( $contact_type ) ) } =
$raw_contact_response->{ $field } // { };
}
$contacts->{ $contact_type } = WWW::eNom::Contact->construct_from_response( $common_contact_response );
}

DESCRIPTION

Representation of an eNom Contact.

ATTRIBUTES

first_name

last_name

organization_name

Predicate of has_organization_name and clearer of clear_organization_name.

NOTE If the organization_name is specified then the previously optional job_title and fax_number attributes become required.

job_title

Predicate of has_job_title and clearer of clear_job_title.

NOTE this field is required if an organization_name was provided.

address1

address2

Predicate of has_address2 and clearer of clear_address2

city

state

Required for Contacts with a US Address, the full name of the state so Texas rather than TX should be used.

Predicate of has_state and clearer of clear_state.

country

The ISO-3166-1 alpha-2 (two character country code) is preferred. You can use a full country name, just keep in mind your response from eNom will be the country code.

zipcode

email

phone_number

An instance of WWW::eNom::PhoneNumber, but this will coerce from a Number::Phone object or a string based representation of the phone number. This will also stringify to a human readable phone number.

fax_number

An instance of WWW::eNom::PhoneNumber, but this will coerce from a Number::Phone object or a string based representation of the phone number. This will also stringify to a human readable phone number.

Predicate of has_fax_number and clearer of clear_fax_number.

NOTE this field is required if an organization_name was provided.

METHODS

construct_creation_request

my $api = WWW::eNom->new( ... );
my $contact = WWW::eNom::Contact->new( ... );
my $registrant_contact_creation_payload = $contact->construct_creation_request('Registrant');
my $admin_contact_creation_payload = $contact->construct_creation_request('Admin');
my $technical_contact_creation_payload = $contact->construct_creation_request('Tech');
my $billing_contact_creation_payload = $contact->construct_creation_request('AuxBilling');
my $response = $api->submit({
method => 'Purchase',
params => {
...,
%{ $registrant_contact_creation_payload },
%{ $admin_contact_creation_payload },
%{ $technical_contact_creation_payload },
%{ $billing_contact_creation_payload },
}
});

Converts $self into a HashRef suitable for creation of a contact with eNom. Accepts a string that must be one of the following:

Registrant
Admin
Tech
AuxBilling

AuxBilling is what eNom calls the "Billing" contact for WHOIS data since the Billing contact is actually the reseller.

construct_from_response

my $response = $api->submit({
method => 'GetContacts',
params => {
Domain => $domain_name
}
});
my $contacts;
for my $contact_type (qw( Registrant Admin Tech AuxBilling )) {
my $raw_contact_response = $response->{GetContacts}{$contact_type};
my $common_contact_response;
for my $field ( keys %{ $raw_contact_response } ) {
if( $field !~ m/$contact_type/ ) {
next;
}
$common_contact_response->{ substr( $field, length( $contact_type ) ) } =
$raw_contact_response->{ $field } // { };
}
$contacts->{ $contact_type } = WWW::eNom::Contact->construct_from_response( $common_contact_response );
}

Getting a contact from a response is a bit more involved then other data marshallers. This is because the fields are all prefixed with the contact type. Rather than having just FirstName the response will contain a field like TechFirstName. This must be processed off before feeding in the HashRef of the response into the construct_from_response method. Returned is an instance of self.