APEX Code Examples to get Rates
Before you can use APEX code to interface with our app you need to install our Automate package (with an additional licence cost). To install you can follow these links for sandbox and production.
Below we have some examples for getting service types and rates (if available with the carriers) based on address information.
FedEx
Id prefId = 'a025800000bs9Qx'; //Your FedEx Preference | |
Id contactId = '00358000006wy1I'; // Jack Rodgers | |
zkmulti__MCShipmate_Preference__c shipmatePref = [ | |
SELECT Id, Name, zkmulti__AccountNumber__c, | |
zkmulti__Carrier__c, zkmulti__Label_Image_Type_Default__c, | |
zkmulti__Billing_City__c, zkmulti__Billing_Country__c, zkmulti__Billing_State__c, | |
zkmulti__Billing_Street__c, zkmulti__Billing_Zip_Postal_Code__c, zkmulti__Company_Name__c, zkmulti__Sender_Email_Default__c, zkmulti__Sender_Name_Default__c, | |
zkmulti__Sender_Phone_Default__c, zkmulti__Shipping_City__c, zkmulti__Shipping_Country__c, zkmulti__Shipping_Is_Residential__c, | |
zkmulti__Shipping_State__c, zkmulti__Shipping_Street__c, zkmulti__Shipping_Zip_Postal_Code__c, zkmulti__Currency_Default__c | |
FROM zkmulti__MCShipmate_Preference__c | |
WHERE Id = :prefId]; | |
// get contact information (for recipient information) | |
Contact con = [ | |
SELECT MailingCity, Account.Name, MailingCountry, | |
Email, FirstName, LastName, | |
Phone, MailingState, MailingStreet, | |
MailingPostalCode | |
FROM Contact | |
WHERE Id = :contactId]; | |
// 1. Shipment and Shipment Info (required object) | |
zkmulti__MCShipment__c ship = new zkmulti__MCShipment__c( | |
zkmulti__Carrier__c = 'FedEx', | |
zkmulti__DropoffType__c = 'DROP_BOX', | |
zkmulti__Label_Image_Type__c = 'PNG', | |
// sender info | |
zkmulti__Sender_Name__c = shipmatePref.zkmulti__Sender_Name_Default__c, | |
zkmulti__Sender_City__c = shipmatePref.zkmulti__Shipping_City__c, | |
zkmulti__Sender_Company__c = shipmatePref.zkmulti__Company_Name__c, | |
zkmulti__Sender_Country__c = shipmatePref.zkmulti__Shipping_Country__c, | |
zkmulti__Sender_Email__c = shipmatePref.zkmulti__Sender_Email_Default__c, | |
zkmulti__Sender_Phone__c = shipmatePref.zkmulti__Sender_Phone_Default__c, | |
zkmulti__Sender_State_Province__c = shipmatePref.zkmulti__Shipping_State__c, | |
zkmulti__Sender_Street__c = shipmatePref.zkmulti__Shipping_Street__c, | |
zkmulti__Sender_Zip_Postal_Code__c = shipmatePref.zkmulti__Shipping_Zip_Postal_Code__c, | |
zkmulti__Sender_Address_is_Residential__c = false, | |
// recipient info | |
zkmulti__Recipient_City__c = con.MailingCity, | |
zkmulti__Recipient_Company__c = con.Account.Name, | |
zkmulti__Recipient_Country__c = con.MailingCountry, | |
zkmulti__Recipient_Email__c = con.Email, | |
zkmulti__Recipient_Name__c = con.FirstName + ' ' + con.LastName, | |
zkmulti__Recipient_Phone__c = con.Phone, | |
zkmulti__Recipient_State_Province__c = con.MailingState, | |
zkmulti__Recipient_Street__c = con.MailingStreet, | |
zkmulti__Recipient_Zip_Postal_Code__c = con.MailingPostalCode, | |
zkmulti__Ship_Date__c = Date.today(), | |
zkmulti__Currency__c = 'USD', | |
zkmulti__Dimension_Units__c = 'IN', | |
zkmulti__Weight_Units__c = 'LB', | |
//zkmulti__Service_Type__c = 'FEDEX_2_DAY_AM', | |
zkmulti__Package_Type__c = 'YOUR_PACKAGING', | |
zkmulti__Payment_Type__c = 'SENDER', | |
zkmulti__Billing_Account_Number__c = shipmatePref.zkmulti__AccountNumber__c, | |
zkmulti__Billing_Country__c = shipmatePref.zkmulti__Billing_Country__c | |
); | |
// 2. Packages - list the number of packages you will be shipping | |
List<zkmulti__MCPackage__c> packages = new List<zkmulti__MCPackage__c>(); | |
zkmulti__MCPackage__c pkg = new zkmulti__MCPackage__c ( | |
zkmulti__Weight__c = 1, | |
zkmulti__Length__c = 1, | |
zkmulti__Width__c = 1, | |
zkmulti__Height__c = 1, | |
zkmulti__DeclaredValue__c = 0 | |
); | |
packages.add(pkg); | |
List<zkmulti.ShipmentRate> rates = zkmulti.BulkShipmentInterface.calculateRates(shipmatePref.Id, ship, packages, null, null, null); | |
System.debug('RATES: ' + rates); | |
/* | |
Example Response: | |
[ | |
carrier=FedEx, | |
cost=null, | |
currencyIsoCode=null, | |
delivery_date=2018-07-02 23:00:00, | |
delivery_days=null, | |
estimate_delivery_days=null, | |
mailService=null, | |
params={base_charge=100.96, delivery_day_of_week=TUE, discounts=0.0, net_charge=107.77, rate_type=PAYOR_ACCOUNT_PACKAGE, rebates=0.0, surcharges=6.81, taxes=0.0, transit_time=null}, | |
rate=107.77, | |
service_type=FIRST_OVERNIGHT, | |
shipmentProvider=null | |
] | |
*/ |
DHL
Id prefId = 'a025800000Zr2jJ'; // your DHL preference | |
Id contactId = '00358000006wy1I'; // you contact record | |
zkmulti__MCShipmate_Preference__c shipmatePref = [ | |
SELECT Id, Name, zkmulti__AccountNumber__c, | |
zkmulti__Carrier__c, zkmulti__Label_Image_Type_Default__c, | |
zkmulti__Billing_City__c, zkmulti__Billing_Country__c, zkmulti__Billing_State__c, | |
zkmulti__Billing_Street__c, zkmulti__Billing_Zip_Postal_Code__c, zkmulti__Company_Name__c, zkmulti__Sender_Email_Default__c, zkmulti__Sender_Name_Default__c, | |
zkmulti__Sender_Phone_Default__c, zkmulti__Shipping_City__c, zkmulti__Shipping_Country__c, zkmulti__Shipping_Is_Residential__c, | |
zkmulti__Shipping_State__c, zkmulti__Shipping_Street__c, zkmulti__Shipping_Zip_Postal_Code__c, zkmulti__Currency_Default__c | |
FROM zkmulti__MCShipmate_Preference__c | |
WHERE Id = :prefId]; | |
// get contact information (for recipient information) | |
Contact con = [ | |
SELECT MailingCity, Account.Name, MailingCountry, | |
Email, FirstName, LastName, | |
Phone, MailingState, MailingStreet, | |
MailingPostalCode | |
FROM Contact | |
WHERE Id = :contactId]; | |
// 1. Shipment and Shipment Info (required object) | |
zkmulti__MCShipment__c ship = new zkmulti__MCShipment__c( | |
zkmulti__Carrier__c = shipmatePref.zkmulti__Carrier__c, | |
zkmulti__Label_Image_Type__c = shipmatePref.zkmulti__Label_Image_Type_Default__c, | |
// sender info | |
zkmulti__Sender_Name__c = shipmatePref.zkmulti__Sender_Name_Default__c, | |
zkmulti__Sender_City__c = shipmatePref.zkmulti__Shipping_City__c, | |
zkmulti__Sender_Company__c = shipmatePref.zkmulti__Company_Name__c, | |
zkmulti__Sender_Country__c = shipmatePref.zkmulti__Shipping_Country__c, | |
zkmulti__Sender_Email__c = shipmatePref.zkmulti__Sender_Email_Default__c, | |
zkmulti__Sender_Phone__c = shipmatePref.zkmulti__Sender_Phone_Default__c, | |
zkmulti__Sender_State_Province__c = shipmatePref.zkmulti__Shipping_State__c, | |
zkmulti__Sender_Street__c = shipmatePref.zkmulti__Shipping_Street__c, | |
zkmulti__Sender_Zip_Postal_Code__c = shipmatePref.zkmulti__Shipping_Zip_Postal_Code__c, | |
zkmulti__Sender_Address_is_Residential__c = false, | |
// recipient info | |
zkmulti__Recipient_City__c = con.MailingCity, | |
zkmulti__Recipient_Company__c = con.Account.Name, | |
zkmulti__Recipient_Country__c = con.MailingCountry, | |
zkmulti__Recipient_Email__c = con.Email, | |
zkmulti__Recipient_Name__c = con.FirstName + ' ' + con.LastName, | |
zkmulti__Recipient_Phone__c = con.Phone, | |
zkmulti__Recipient_State_Province__c = con.MailingState, | |
zkmulti__Recipient_Street__c = con.MailingStreet, | |
zkmulti__Recipient_Zip_Postal_Code__c = con.MailingPostalCode, | |
zkmulti__Ship_Date__c = Date.today(), | |
zkmulti__Currency__c = 'USD', | |
zkmulti__Dimension_Units__c = 'IN', | |
zkmulti__Weight_Units__c = 'LB', | |
//zkmulti__Service_Type__c = 'Express1030NonDoc', // this line is commented to get all services available | |
zkmulti__Package_Type__c = 'your_packaging', | |
zkmulti__Return_Shipment__c = true, | |
zkmulti__Payment_Type__c = 'Sender' | |
); | |
// 2. Packages | |
List<zkmulti__MCPackage__c> packages = new List<zkmulti__MCPackage__c>(); | |
zkmulti__MCPackage__c pkg = new zkmulti__MCPackage__c ( | |
zkmulti__Weight__c = 1, | |
zkmulti__Length__c = 3, | |
zkmulti__Width__c = 2, | |
zkmulti__Height__c = 1, | |
zkmulti__DeclaredValue__c = 0 | |
); | |
packages.add(pkg); | |
// for international shipments don't forget to add customs items | |
List<zkmulti__MCCustoms_Item__c> customsItems = new List<zkmulti__MCCustoms_Item__c>(); | |
zkmulti__MCCustoms_Item__c customItem = new zkmulti__MCCustoms_Item__c( | |
zkmulti__Carrier__c = shipmatePref.zkmulti__Carrier__c, | |
zkmulti__Country_of_Manufacture__c = 'US', | |
zkmulti__Description__c = 'test description', | |
zkmulti__Quantity__c = 1, | |
zkmulti__QuantityUnits__c = 'F', | |
zkmulti__UnitPrice__c = 10, | |
zkmulti__Weight__c = 1 | |
); | |
customsItems.add(customItem); | |
List<zkmulti.ShipmentRate> rates = zkmulti.BulkShipmentInterface.calculateRates(shipmatePref.Id, ship, packages, null, customsItems, null); | |
System.debug('RATES: ' + rates); | |
Let us know if you have any questions and we will be happy to help.