NAME

Business::CanadaPost - A module to fetch shipping costs for Canada Post.

SYNOPSIS

use Business::CanadaPost;

#initialise object - specifying from postal code, and canada post merchant id
my $shiprequest = Business::CanadaPost->new(	merchantid => 'CPC_DEMO_XML',
						frompostal => 'M1P1C0',
						testing	   => 1			);

# add an item to be shipped
$shiprequest->additem(quantity 		=> 1,
			height 		=> 60,
			width  		=> 15,
			length 		=> 60,
			weight 		=> 7,
			description 	=> 'box o stuff',
			readytoship 	=> 1);

# set more parameters on the item being shipped
$shiprequest->setcountry('United States');
$shiprequest->setprovstate('New York');
$shiprequest->settopostalzip('11726');
$shiprequest->settocity('New York');
$shiprequest->getrequest() || print "Failed sending request: " . $shiprequest->geterror() . "\n"; 
print "There are " . $shiprequest->getoptioncount() . " available shipping methods.\n";

DESCRIPTION

Business::CanadaPost is a Perl library created to allow users to fetch real-time options and pricing quotes on shipments sent from Canada using Canada Post.

To get off of the development server, you'll need to get an account from Canada Post's "Sell Online" service. While testing, use user id CPC_DEMO_XML and specify a parameter of 'testing' with a value of 1 to the new() constructor, so it knows to use Canada Post's devel server. If you don't, and don't have an account, you'll only receive errors.

PREREQUISITES

This module requires strict, Exporter, and LWP.

EXPORT

None.

CONSTRUCTOR

new(options)

Creates a new Business::CanadaPost object. Different objects available are:

language

'en' for English, and 'fr' for French. (Default: en)

frompostalcode

This is used to override the setting in our sell online profile for the from address you would be shipping from. Format is A1A1A1 (A being any upper-case character between A-Z, and 1 being any digit 0-9)

If not specified, it will default to your setting in your Canada Post Sell Online(tm) profile.

turnaroundtime

Your turnaround time in hours. This is the amount of time between receiving the order and shipping it out. It is used to create a shipping and delivery date for the item. If none is specified, it will default to what you have set in your profile.

If you have nothing set in your profile, it will assume you are shipping next-day.

(Default: none)

merchantid

This is your merchant ID assigned to you by Canada Post. It usually begins with CPC_. You can use CPC_DEMO_XML if you're testing and using Canada Post's test servers. (Default: none. You need to set this or the module will return a fatal error.)

totalprice

Total value of the shipment you're mailing. This is used to calculate whether or not a signature will be required, and whether it will need to include more insurance to cover the item (beyond the $100 included in the original shipment.) (Default: 0.00)

units

Possible values are 'metric' and 'imperial'.

If set to metric, you will be specifying height, length, and width in cm, and weight in kg.

If set to imperial, you will be specifying height, length, and width in in, and weight in lb.

(Default: metric)

testing

Possible values: 1 or 0.

Specifies whether you're using a production account, or a testing account. If you're in testing mode, you'll be connecting to Canada Post's test servers, which run on less stable hardware, on a slower link to the Internet, and are rate-throttled.

(Default: 0)

items

An array containing the items in your shipment. Array elements are:

(quantity, weight, length, width, height, description, readytoship [1 or 0])

readytoship specifies that you have the item already boxed or prepared for shipment.

If this is set to 0, then Canada Post server's will calculate the most appropriate box listed in your account profile, and use it for its dimensions and shipping cost.

OBJECT METHODS

Most errors are fatal. The tool tries to guess for you if a value seems out of whack.

geterror

Used to fetch the error set when a function return 0 for failure.

Example:

$object->getrequest or print "Error: " . $object->geterror() . "\n";
setlanguage

Used to change the language.

Example:

$object->setlanguage('fr'); # changes messages to french.
settocity

Specifies city being shipped to.

Example:

$object->settocity('New York');
settesting

Specifies whether account is in testing.

Example:

$object->settesting(1);
setcountry

Specifies country being mailed to.

Example:

$object->setcountry('United States');
setmerchantid

Specifies Canada Post merchant ID.

Example:

$object->setmerchantid('CPC_DEMO_XML');
setunits

Specifies imperial or metric measurements.

Example:

$object->setunits('imperial');
setfrompostalcode

Specifies postal code item is being shipped from.

Example:

$object->setfrompostalcode(''); # will reset postal code back to default set in canada post profile
settopostalcode

Specifies postal code/zip code item is being shipped to.

Example:

$object->settopostalcode('N2G5M4');
setprovstate

Specifies province/state being shipped to.

Example:

$object->settopostalcode('Ontario');
setturnaroundtime

Specifies turnaround time in hours.

Example:

$object->setturnaroundtime(24);
settotalprice

Specifies total value of items being shipped.

Example:

$object->settotalprice(5.50);
additem

Adds an item to be shipped to the request.

Example:

$object->additem(length => 5,
		 height => 3,
		 width  => 2,
		 weight => 5,
		 description => "box of cookies",
		 readytoship => 1,
		 quantity => 1);

Weight, length, height, and width are the only requirements.

If not specified, quantity will default to 1, readytoship will default to 0, and description will default to an empty string.

getrequest

Builds request, sends it to Canada Post, and parses the results.

Example:

$object->getrequest();

returns 1 on success.

getoptioncount

Returns number of available shipping options.

Example:

my $available_options = $object->getoptioncount();
getsignature

Returns 1 or 0 based on whether or not a signature would be required for these deliveries.

Example:

my $signature_required = $object->getsignature();
getinsurance

Returns 1 or 0 based on whether or not extra insurance coverage is required (and included) in prices.

Example:

my $insurance_included = $object->getinsurance();
getshipname

Receives an option number between 1 and $object->getoptioncount() and returns that option's name.

Example:

print "First option available is: " . $object->getshipname(1) . "\n";
getshiprate

Operates the same as getshipname, but returns cost of that shipping method.

Example:

print "First option would cost: " . $object->getshiprate(1) . " to ship.\n";

returns 1 on success.

getshipdate

Operates the same as getshipname, but returns assumed shipment date.

Example:

print "Item would be shipped out on " . $object->getshipdate(1) . "\n";
getdelvdate

Operates the same as getshipname, but returns when the approximate delivery date would be based on a shipping date of $object->getshipdate();

Example:

print "Assuming a delivery date of " . $object->getshipdate(1) .
	", this item would arrive on: " . $object->getdelvdate(1) . "\n";
getdayofweek

Operates the same as getshipname, but returns which day of the week $object->getdelvdate() lands on numerically. (1 .. 6; 1 == Sunday, 6 == Saturday)

Example:

print "Your item would likely be delivered on the " .
	$object->getdayofweek(1) . " day of the week.\n";
getnextdayam

Operates the same as getshipname, but returns whether or not the current option provides for next day AM delivery service.

Example:

printf("This item is %savailable for next day delivery\n",
		$object->getnextdayam(1) == 1 ? '' : 'NOT ');
getestshipdays

Operates the same as getshipname, but returns estimated number of days required to ship the item.

Example:

print "This shipping method would take approximately: " . $object->getestshipdays() .
	" days to arrive.\n";
getconfirmation

Returns whether or not delivery confirmation is included in price quotes.

Example:

my $confirmation_included = $object->getconfirmation();
getcomments

Returns any extra comments Canada Post might include with your quote.

Example:

my $extra_info = $object->getcomments();

BUGS

Probably lots. E-mail me at <pause@datademons.com> should you locate any.

AUTHOR

This module was written by Justin Wheeler <pause@datademons.com> Feel free to e-mail me with any comments/questions/concerns/ideas/etc.

For more information on how Canada Post's XML shipping system works, please see http://206.191.4.228/DevelopersResources

Copyright (C) 2005 Justin Wheeler / datademons

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details, available at http://www.gnu.org/licenses/gpl.html.

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 169:

You forgot a '=back' before '=head1'

You forgot a '=back' before '=head1'

Around line 913:

You forgot a '=back' before '=head1'