octolize/royal-mail-price-calculator

A library to calculate the cost of sending a package with Royal Mail.

This package's canonical repository appears to be gone and the package has been frozen as a result.

1.6.1 2024-04-18 07:52 UTC

README

This library is forked to revive it. Built by WyldCode a subsidiary of e-dimensionz, Inc

It allows you to calculate the cost of sending a package with Royal Mail, updated prices and extends support to all package prices.

Usage

Install the latest version with composer require alexedimensionz/royal-mail-price-calculator

Main Changes from Justin Hook's Repo

  • Removed Doctrine requirement
  • Added all shipping types
  • Added International shipping options and prices
  • Continuously Updating price lists

Supported Services

ServiceClass
1st Class ServiceFirstClassService()
2nd Class ServiceSecondClassService()
Signed For 1st ClassSignedForFirstClassService()
Signed For 2nd ClassSignedForSecondClassService()
Guaranteed by 9amGuaranteedByNineAmService()
Guaranteed by 9am with Saturday GuaranteeGuaranteedByNineAmWithSaturdayService()
Guaranteed by 1pmGuaranteedByOnePmService()
Guaranteed by 1pm with Saturday GuaranteeGuaranteedByOnePmWithSaturdayService()
International EconomyInternationalEconomy()
International StandardInternationalStandard()
International SignedInternationalSigned()
International TrackedInternationalTracked()
International Tracked And SignedInternationalTrackedAndSigned()

Example for UK Delivery Targets

<?php

require 'vendor/autoload.php';

use \RoyalMailPriceCalculator\Calculator;
use \RoyalMailPriceCalculator\Package;
use \RoyalMailPriceCalculator\Services\GuaranteedByOnePmService;
use \RoyalMailPriceCalculator\Services\FirstClassService;

$calculator = new Calculator();

$package = new Package();
$package->setDimensions(15, 15, 0.4);
$package->setWeight(90);

$calculator->setServices(array(
							new FirstClassService(), 
							new GuaranteedByOnePmService()));

foreach ($calculator->calculatePrice($package) as $calculated)
{
    echo $calculated['service']->getName() . "\n";
    foreach ($calculated['prices'] as $price) {
        echo "  →  £{$price['price']} (Compensation: £{$price['compensation']})\n";
    }
    echo "\n";
}

Will output something like:

1st Class Service
  →  £0.62 (Compensation: £20)

Guaranteed by 1pm
  →  £6.40 (Compensation: £500)
  →  £7.40 (Compensation: £1000)
  →  £9.40 (Compensation: £2500)

Example for International Delivery Targets

<?php

require 'vendor/autoload.php';

use \RoyalMailPriceCalculator\Calculator;
use \RoyalMailPriceCalculator\Package;
use \RoyalMailPriceCalculator\Services\InternationalTracked;
use \RoyalMailPriceCalculator\Services\InternationalEconomy;

$calculator = new Calculator();

$package = new Package();
$package->setDimensions(15, 15, 0.4);
$package->setWeight(90);

// This part is mandatory for international shipments
$target_iso = 'US';
$calculator->setCountryCode($target_iso);
//


$calculator->setServices(array(
                         	new InternationalTracked(), 
                         	new InternationalEconomy()));


// Note: there is no compensation value for international
foreach ($calculator->calculatePrice($package) as $calculated)
{
    echo $calculated['service']->getName() . "\n";
    foreach ($calculated['prices'] as $price) {
        echo "  →  £{$price['price']}\n";
    }
    echo "\n";
}

Will output something like:

International Tracked
  →  £8.50

International Economy
  →  £13.30

Useful Functions

Royal Mail has 5 delivery zones:

  • UK
  • Europe
  • International (Zone 1)
  • International (Zone 2)
  • US (Zone 3)

You can find the zone code for your country by using the 2-Letter ISO code.

<?php

require 'vendor/autoload.php';

use \RoyalMailPriceCalculator\Calculator;

?>
CA region is: <?php echo Calculator::get_region_code('CA'); ?><br/>
US region is: <?php echo Calculator::get_region_code('US'); ?><br/>
GB region is: <?php echo Calculator::get_region_code('GB'); ?><br/>
AU region is: <?php echo Calculator::get_region_code('AU'); ?><br/>
DE region is: <?php echo Calculator::get_region_code('DE'); ?>

Will output:

CA region is: intl_1
US region is: intl_3
GB region is: uk
AU region is: intl_2 
DE region is: eu