Canada Post is a premium shipping method that allows you get shipping rates from Canada Post’s API. It requires that your store use Canadian Dollars as its currency and your server has SimpleXML installed. The extension primarily works with cm and kg, but other units can be converted automatically.
Canada Post handles both domestic and international parcels.
Installation ↑ Back to Top
- Download the .zip file from your WooCommerce account.
- Go to: WordPress Admin > Plugins > Add New to upload the file you downloaded with Choose File.
- Activate the extension.
More information at:.
Getting Started ↑ Back to Top
The first step is to link your Canada Post account. A notification at the top of the admin screen will remind you to Register/Connect:
- Click the Register/Connect button to be taken to Canada Post’s website.
- Log into your account or register as a new user to allow Woo to get shipping quotes from the API on your behalf.
- Canada Post may request that you enter a credit card for future automatic transactions, such as monthly fees, transaction fees, etc. You can change or update it later when you sign into My Business Profile on the Canada Post dashboard.
You should be sent to the admin panel upon completion. If you want to disconnect your account in the future, click the link at top of the Settings page under WooCommerce > Settings > Shipping > Canada Post:
API & Debug
Go to: WooCommerce > Settings > Shipping > Canada Post.
- Connect/Disconnect your Canada Post Account
- Debug Mode – Tick the checkbox to log API requests and responses for the cart and checkout pages. Useful for troubleshooting.
Configuration ↑ Back to Top
- Go to: WooCommerce > Settings > Shipping.
- Select your Shipping Zone that you want to add the method to, and press the Add shipping method + button on the right
- Select Canada Post from the dropdown and press Add shipping method:
- Click on the new Canada Post method to configure the settings:
- Method Title – Enter a description, which is shown to customers in checkout.
- Origin Postcode – This should be set to the postcode of the location from where you ship. It’s sent to the API to calculate rates.
- Method Availability – Allows you to restrict to certain countries. Leave set to All Countries to make available to all customers.
- Quote Type – Commercial uses rates and discounts associated with your account; also used for VentureOne members. Select Counter to get normal rates you’d receive in person.
- Rate Cost – Base is the base rate cost. Due is the cost after taxes are applied.
- Lettermail – Use the dropdown to select Standard and/or Registered rates. Lettermail isn’t part of the Canada Post API, and rates are calculated using box packing and hardcoded prices.
- Additional Options – Use the dropdown to select Coverage, Proof of Age and/or Signature for parcels.
- Delivery Time – Tick the checkbox if you want a delivery estimate (in days) displayed next to rates. Info pulled from the API.
- Parcel Packing Method – Use the dropdown to select Pack Individually, Weight of All Items or Pack with Weights and Dimensions (explanation below).
- Offer Rates – Use the dropdown to select All Rates (user chooses) or Cheapest Rate (single).
- Services – Rename and re-order Canada Post shipping rates and add price adjustments as a percentage or by dollar amount. Adjustments can be positive (surcharge/fee) or negative (discount).
Parcel Packing Methods ↑ Back to Top
There are three packing methods with Canada Post — each affects parcels you send to the API.
Each item in your cart (non-virtual) is sent to the Canada Post API. Quotes for all items are combined for the final cost.
The cart is be split into 30 kg packages, and each package sent to the API. No dimensions are sent, only weight.
Pack into boxes
Items are packed in pre-defined boxes and sent to the API. We recommend this option. See Box-Packing for more information.
Box-Packing ↑ Back to Top
The box packer included with this shipping method lets you group items into packages in which you define height, width, length, weight and max-weight. Packing is primarily volume based, but also considers item sizes.
Setting up box sizes
Within Settings, go to the Box setting. Click Add Box to set up the box dimensions:
Outer dimensions are used for parcel dimensions and passed to the API.
Inner dimensions are used for packing, and items must fit within them.
Box weight is the weight of the actual box, and is added to the weight of contents. This increases the cost of shipping.
Max weight is the maximum weight your box can hold. This includes content weight and box weight.
How the calculation works
The packer does the following:
- Finds boxes that fit the items being packed, using H x W x D.
- Packs all items fitting into boxes, using volume.
- Uses largest box that fits 100% of items; or uses highest % packed box, and then returns unpacked items and repeats the process.
- Packs ‘unpackable’ items alone, using item dimensions.
- Returns all packed boxes.
Customer Usage ↑ Back to Top
Customers get quotes from two places after inputting their address:
- Cart page – using the shipping calculator
- Checkout page – by filling in shipping and billing forms
Troubleshooting ↑ Back to Top
No rates returned/no rates available
- Ensure that you have connected your production Canada Post account.
- Enable development mode, or turn on WP_DEBUG to see debugging information on the cart page. This often reveals the issue.
- Check that products have sizes and weights set – without this, the calculation cannot be performed.
- Check that your store’s base country is Canada and has Canadian Dollars set as the currency (WooCommerce > Settings > General).
After attempting to authorize Canada Post, it brings me back to a page with a number 1 on the top left
You may need to update your permalink settings for WordPress to Pretty Permalinks.
Why are my lookups timing out?
Try opening Port 30000 for API communications.
Error message in cart: Fatal error: Cannot use object of type WP_Error as array in ../woocommerce-shipping-canada-post/shipping-canada-post.php
You see this error message if your server is unable to use the wp_remote_get() function. This can be verified using the Status Report:
In this case, we recommend contacting your hosting company so they update your server.