forked from goshippo/shippo-php-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
international-shipment.php
133 lines (116 loc) · 4.88 KB
/
international-shipment.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/*
In this tutorial we have an order with a sender address,
recipient address and parcel. The shipment is going from the
United States to an international location.
In addition to that we know that the customer expects the
shipment to arrive within 3 days. We now want to purchase
the cheapest shipping label with a transit time <= 3 days.
Sample output:
--> Shipping label url: https://shippo-delivery-east.s3.amazonaws.com/785d52895d5a464cae35730a9f65ef28.pdf?Signature=TBmzL5S5mJ8BdzcacMQonaObZzE%3D&Expires=1510333519&AWSAccessKeyId=AKIAJGLCC5MYLLWIG42A
--> Shipping tracking number: CB150465075US
Before running it, remember to do
composer install
*/
require_once(__DIR__ . '../../vendor/autoload.php');
// or if you do not have or want the composer autoload feature do
// require_once('path/to/shippo/library/folder/' . 'lib/Shippo.php');
// Replace <API-KEY> with your credentials from https://app.goshippo.com/api/
Shippo::setApiKey('<API-KEY>');
// Example from_address array
// The complete refence for the address object is available here: https://goshippo.com/docs/reference#addresses
$from_address = array(
'name' => 'Mr Hippo',
'company' => 'Shippo',
'street1' => '215 Clayton St.',
'city' => 'San Francisco',
'state' => 'CA',
'zip' => '94117',
'country' => 'US',
'phone' => '+1 555 341 9393',
'email' => '[email protected]',
);
// Example to_address array
// The complete refence for the address object is available here: https://goshippo.com/docs/reference#addresses
$to_address = array(
'name' => 'Ms Hippo',
'company' => 'Regents Park',
'street1' => 'Outer Cir',
'city' => 'London',
'zip' => 'NW1 4RY',
'country' => 'GB',
'phone' => '+1 555 341 9393',
'email' => '[email protected]',
'metadata' => 'For Order Number 123',
);
// Parcel information array
// The complete reference for parcel object is here: https://goshippo.com/docs/reference#parcels
$parcel = array(
'length'=> '5',
'width'=> '5',
'height'=> '5',
'distance_unit'=> 'in',
'weight'=> '2',
'mass_unit'=> 'lb',
);
// Example CustomsItems object.
// The complete reference for customs object is here: https://goshippo.com/docs/reference#customsitems
$customs_item = array(
'description' => 'T-Shirt',
'quantity' => '2',
'net_weight' => '400',
'mass_unit' => 'g',
'value_amount' => '20',
'value_currency' => 'USD',
'origin_country' => 'US',
'tariff_number' => '',
);
// Creating the Customs Declaration
// The details on creating the CustomsDeclaration is here: https://goshippo.com/docs/reference#customsdeclarations
$customs_declaration = Shippo_CustomsDeclaration::create(
array(
'contents_type'=> 'MERCHANDISE',
'contents_explanation'=> 'T-Shirt purchase',
'non_delivery_option'=> 'RETURN',
'certify'=> 'true',
'certify_signer'=> 'Mr Hippo',
'items'=> array($customs_item),
));
// Example shipment object
// For complete reference to the shipment object: https://goshippo.com/docs/reference#shipments
// This object has async=false, indicating that the function will wait until all rates are generated before it returns.
// By default, Shippo handles responses asynchronously. However this will be depreciated soon. Learn more: https://goshippo.com/docs/async
$shipment = Shippo_Shipment::create(
array(
'address_from' => $from_address,
'address_to' => $to_address,
'parcels'=> array($parcel),
'customs_declaration' => $customs_declaration -> object_id,
'async' => false,
)
);
// Rates are stored in the `rates` array
// The details on the returned object are here: https://goshippo.com/docs/reference#rates
// Get the first rate in the rates results for demo purposes.
$rate = $shipment['rates'][0];
// Purchase the desired rate with a transaction request
// Set async=false, indicating that the function will wait until the carrier returns a shipping label before it returns
$transaction = Shippo_Transaction::create(array(
'rate'=> $rate['object_id'],
'async'=> false,
));
// Print the shipping label from label_url
// Get the tracking number from tracking_number
// Most international shipments require you to add 3 commercial invoices in the package's "pouch", a special envelope attached on the package. Shippo automatically creates these 3 copies for you, which will be returned in the Transaction's commercial_invoice field.
if ($transaction['status'] == 'SUCCESS'){
echo "--> " . "Shipping label url: " . $transaction['label_url'] . "\n";
echo "--> " . "Shipping tracking number: " . $transaction['tracking_number'] . "\n";
} else {
echo "Transaction failed with messages:" . "\n";
foreach ($transaction['messages'] as $message) {
echo "--> " . $message . "\n";
}
}
// For more tutorals of address validation, tracking, returns, refunds, and other functionality, check out our
// complete documentation: https://goshippo.com/docs/
?>