Monday, April 15, 2013

FedEx Rate Service API using plain old PHP and cURL (the quick and easy way)

Here's a quick way to try out the FedEx Rate Service API (SOAP version) without getting lost in WSDLs and all that zipped PDF documentation jazz. Certainly you will need to look at that PDF when you get into details, but where the fun in that right? Let's get dirty with code quick!

One nice thing about SOAP is beneath all that layers complicated stuff, it's all just plain XML being posted into a URL. "Nice" and "SOAP" doesn't usually come in one sentence, but SOAP is here and most of the time there's really no choice when you're working with an external API, so I'm just being positive here :) So as long as you know what you're doing with the XML then you'll do just fine.

Here's the sample code:

//your account details here
$key = '';
$password = '';
$account_number = '';
$meter_number = '';

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="" xmlns:ns1=""><SOAP-ENV:Body><ns1:RateRequest>
<ns1:TransactionDetail><ns1:CustomerTransactionId> *** Rate Request v13 using PHP ***</ns1:CustomerTransactionId></ns1:TransactionDetail><ns1:Version><ns1:ServiceId>crs</ns1:ServiceId><ns1:Major>13</ns1:Major><ns1:Intermediate>0</ns1:Intermediate><ns1:Minor>0</ns1:Minor></ns1:Version><ns1:ReturnTransitAndCommit>true</ns1:ReturnTransitAndCommit><ns1:RequestedShipment>
<ns1:Shipper><ns1:Contact><ns1:PersonName>Sender Name</ns1:PersonName><ns1:CompanyName>Sender Company Name</ns1:CompanyName><ns1:PhoneNumber></ns1:PhoneNumber></ns1:Contact><ns1:Address><ns1:StreetLines></ns1:StreetLines><ns1:City></ns1:City><ns1:StateOrProvinceCode></ns1:StateOrProvinceCode>
<ns1:Recipient><ns1:Contact><ns1:PersonName>Recipient Name</ns1:PersonName><ns1:CompanyName>Company Name</ns1:CompanyName><ns1:PhoneNumber></ns1:PhoneNumber></ns1:Contact><ns1:Address><ns1:StreetLines></ns1:StreetLines><ns1:City></ns1:City><ns1:StateOrProvinceCode></ns1:StateOrProvinceCode>

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$result_xml = curl_exec($ch);

// remove colons and dashes to simplify the xml
$result_xml = str_replace(array(':','-'), '', $result_xml);
$result = @simplexml_load_string($result_xml);

print '<pre>';
print 'Rate: $';
print (string) $result->SOAPENVBody->RateReply->RateReplyDetails->RatedShipmentDetails[0]->ShipmentRateDetail->TotalNetCharge->Amount;
print '<hr/>';


  1. Thank you for your example. FedEx documentation has no good example.

  2. Antonio, thank you so much for providing this example, as it worked nicely and really helped me out.

  3. Thank you for the example. Am wondering if you can comment on the accuracy of the return quotation versus actual rates. I do note that you included the dimensions of each unit of item in the request. Thanks for any reply! =)

  4. But i got error in this code .please help me to solve this problem

  5. I got error in this above code.How can i solve?

  6. For those getting an error with tis code, don't forget that the first line of your PHP should be <?php instead of <?. Other than that, make sure you have the correct FEDEX account, key, password, and meter numbers

  7. I was getting an error regarding the meter number until I realized I was using the production meter number, but submitting to the test URL.

    The test url is:
    The production url is:

  8. I am getting a "Authentication Failed" as response..... what should I do ?

  9. Thanks! You are a LIFE SAVER!

  10. This comment has been removed by the author.

  11. I am getting error:
    [v13Severity] => ERROR
    [v13Source] => prof
    [v13Code] => 1000
    [v13Message] => Authentication Failed

  12. Do you have an example like this for FedEx Proof of Delivery using PHP and cURL? How did you know what to place in the $xml variable for the value of it? Any help would be great!

  13. hello sir ,

    Is this for use or is it full of error . Can we use this code now ??

    I need to get Fedex rates .

    Thanks .