Net::TPP - A simple perl interface to the TPP API. http://www.tppwholesale.com.au/api.php
use Net::TPP; use warnings; use strict; # Create $tpp object and set login details my $tpp = Net::TPP->new( AccountNo => '12345', UserId => 'Foo', Password => 'Bar' ); # Register a domain if it is available if ($tpp->can_register_domain(Domain => 'tppwholesale.com.au')) { my $domain_order_details = $tpp->register_domain( Domain => 'tppwholesale.com.au', # Other values .. ); } # Check order status my $order_status = $tpp->get_order_status(OrderID => 1234567, Domain => 'tppwholesale.com.au'); # Check details of a domain you own my $domain_details = $tpp->get_domain_details(Domain => 'tppwholesale.com.au');
Net::TPP is a simple module to provide an object-oriented interface to use the TPP API with your TPP account for various domain functions - registering, transferring & managing domains, etc.
Instantiate a new TPP object
my $tpp = Net::TPP->new( AccountNo => '12345', UserId => 'Foo', Password => 'Bar' );
Call a specific API operation directly. Consult TPP API documention for the parameters required. Note that authentication parameters will be passed in automatically (such as SessionID)
my $domain_details = $tpp->call( Mode => 'QUERY', Type => 'Domains', Object => 'Domain', Action => 'Details', Domain => 'tppwholesale.com.au' );
This method (and the convenience methods below that use this method) will return a hashref when successful. The hashref content may change depending on which specific call is made, however it typically contains:
{ OK => 1, # A true value if the call succeeded. output => $VAR, # A string or a hashref with relevant output, depending on what call was made output_raw => 'string' # A string of the raw response from TPP }
Return the last error that occured. If necessary, you can check the error code with $tpp->{error_code}
There are a number of convenience methods with names that are fairly self-descriptive. These methods simply execute the call method with the appropriate parameters.
This method does not really need to be called. It will be called automatically by the object if login is required.
Returns various details about the domain you own in a hash reference in {output}.
my $domain_details = $tpp->get_domain_details(Domain => 'tppwholesale.com.au'); if ($domain_details && $domain_details->{OK}) { printf "This is the expiry date %s\n",$domain_details->{output}->{ExpiryDate}; printf "Here are the nameservers %s\n",join(', ',@{$domain_details->{output}->{Nameserver}}); }
Returns information about an order you have previously placed, perhaps for a domain registration or a transfer.
my $order_status = $tpp->get_order_status(OrderID => '1234567', Domain => 'tppwholesale.com.au'); print Dumper($order_status->{output}); # Example content of {output} hashref: # # Pending transfer: # '60xxxxx' => { # This is the OrderID passed as input # 'status' => 'OK', # 'message' => 'Scheduled,transfer requested (awaiting registry response)' # }, # 'domain.org' => { # This is the Domain passed as input # 'status' => 'OK', # 'message' => 'icannTransfer2,Scheduled,transfer requested (awaiting registry response)' # } # # # Completed transfer # '60xxxxx' => { # 'status' => 'OK', # 'message' => 'Complete' # }, # 'domain.org' => { # 'status' => 'OK', # 'message' => '' # } # # # Or if only order id was specified, output is not be divided into domain and order id. It will just be: # { # 'status' => 'OK', # 'message' => 'Complete' # };
Check if a domain can be renewed.
my $can_renew_domain = $tpp->can_renew_domain(Domain => 'tppwholesale.com.au'); print Dumper($can_renew_domain); # Example output # 'output' => { # 'Maximum' => '2', # Maximum years for which you can renew # 'ExpiryDate' => '2013-08-06', # 'Minimum' => '2' # Minimum years # }
Renew a domain you own with TPP that is due to expire soon.
$tpp->renew_domain(Domain => 'tppwholesale.com.au', Period => 2); # Renew for 2 years
Check if a domain is available to be registered
if ($tpp->can_register_domain(Domain => 'tppwholesale.com.au')) { print "Yes we can register this domain\n"; }
Register a domain. There are many required fields, it's best to consult the TPP API documentation.
my $results = $tpp->register_domain( Domain => 'tppwholesale.com.au', Period => 2, # AccountOption - Default value (if omitted) creates a new account rather than specify an AccountID. OwnerContactID => 'xxxxxx', A contact ID that you have set up previously. AdministrationContactID => 'xxxxxx', A contact ID that you have set up previously. BillingContactID => 'xxxxxx', A contact ID that you have set up previously. TechnicalContactID => 'xxxxxx', A contact ID that you have set up previously. Host => [qw(ns1.tppwholesale.com.au ns2.tppwholesale.com.au)], # Name Servers RegistrantName => 'BUSINESS NAME PTY LTD', # Legal entity RegistrantID => 'xxxxxxxxxxx', #ABN/ACN etc RegistrantIDType => 2, # ABN in this case. EligibilityID => 'xxxxxxxxxxx', # Establish eligibility for the domain name EligibilityIDType => 12, # ABN in this case EligibilityType => 5, # Company in this case EligibilityReason => 2, # Close and substantial connection between the domain name and the operations of your Entity ); print Dumper($results); # $VAR1 = { # # ... # 'OK' => 1, # 'output' => '1234567', # Order number # };
Check if a domain can be transferred
my $can_transfer_domain = $tpp->can_transfer_domain(Domain => 'tppwholesale.com.au'); if ($can_transfer_domain) { print "Yes we can transfer this domain\n"; print Dumper($can_transfer_domain); # 'output' => { # 'RequirePassword' => '1' # } # # # Or different output with a DomainPassword specified: # output => { # 'Maximum' => '10', # 'Owner' => 'Business X Limited', # 'status' => 'OK', # 'ExpiryDate' => '2013-10-01', # 'Minimum' => '', # 'OwnerEmail' => 'email@address', # }; }
Transfer a domain from another registrar to TPP under your account.
my $domain_transfer = $tpp->transfer_domain( Domain => 'tppwholesale.com.au', DomainPassword => '12345678', OwnerContactID => 1234567, AdministrationContactID => 1234567, TechnicalContactID => 1234567, BillingContactID => 1234567, ); print Dumper($domain_transfer); # Example output. - note that this might give an OK even though the domain password is wrong # output => { # ... # 'OK' => 1, # 'output' => '61xxxxx' # Order ID # };
Note that no option exists to change the name servers as part of the transfer. Name server changes need to be made before or after the transfer.
Add name servers to the list of current name servers for a domain. Note that you may want to use replace_hosts instead of this method.
$tpp->update_hosts( Domain => 'tppwholesale.com.au', AddHost => [qw(ns3.tppwholesale.com.au ns4.tppwholesale.com.au)], );
An alias for update_hosts
Similar to update_hosts except that the current name servers will be removed from the domain first. If required, it will also unlock a domain temporarily in order to set these name servers.
$tpp->replace_hosts( Domain => 'tppwholesale.com.au', AddHost => [qw(ns3.tppwholesale.com.au ns4.tppwholesale.com.au)], );
Note that this simply calls the UpdateHosts operation with the extra parameter: RemoveHost => 'ALL'
An alias for replace_hosts
This will lock the domain within TPP. Note that name servers cannot be updated while domains are locked, however replace_hosts will unlock if necessary.
This will unlock the domain within TPP. Note that name servers cannot be updated while domains are locked, however replace_hosts will unlock if necessary.
Create a contact under your TPP account.
$tpp->create_contact( FirstName => 'Person', LastName => 'OfInterest', Address1 => '123 Fake St', City => 'Sydney', Region => 'NSW', PostalCode => '2000', CountryCode => 'AU', PhoneCountryCode => '61', PhoneAreaCode => '02', PhoneNumber => '99999999', Email => 'email@address', ); # Example output: # { # .. # 'OK' => 1, # 'output' => '1234567' # Order number # };
Update an existing contact under your TPP account for a specific domain.
$tpp->update_contact( Domain => 'tppwholesale.com.au', TechnicalContactID => 1234567, );
no test mode
TPP have confirmed that test-mode does not work on their system, despite mentions in some versions of the documentation. This makes it difficult to properly test all usage cases, and as such only major functions have been tested.
no ip lock down
The IP lockdown is not enabled by default - no IP address needs to be specified for use with the API. TPP have confirmed, however, that they lock an IP when 'the system detects any threat from a specific IP'
0.02
Matt Vink <matt.vink@gmail.com>
Copyright 2013 Matt Vink, All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
This module comes without warranty of any kind.
To install Net::TPP, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::TPP
CPAN shell
perl -MCPAN -e shell install Net::TPP
For more information on module installation, please visit the detailed CPAN module installation guide.