For more information visit Fedex Web Services for Shipping.
This version uses the Non-SOAP Web Services so there is no need to download the Fedex WSDL files, note however that you will need to apply for development/production credentials.
Note: This is work in progress make sure to test your results.
Rails 3.x using Bundler's Gemfile:
gem 'fedex'
Rails 2.x or without Rails or Bundler:
gem install fedex
Define the shipper:
shipper = { :name => "Sender",
:company => "Company",
:phone_number => "555-555-5555",
:address => "Main Street",
:city => "Harrison",
:state => "AR",
:postal_code => "72601",
:country_code => "US" }
Define the recipient:
recipient = { :name => "Recipient",
:company => "Company",
:phone_number => "555-555-5555",
:address => "Main Street",
:city => "Franklin Park",
:state => "IL",
:postal_code => "60131",
:country_code => "US",
:residential => "false" }
Define the packages; multiple packages in a single shipment are allowed: Note that all the dimensions must be integers.
packages = []
packages << {
:weight => {:units => "LB", :value => 2},
:dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" }
}
packages << {
:weight => {:units => "LB", :value => 6},
:dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" }
}
By default packaging type is "YOUR PACKAGING" and the drop off type is "REGULAR PICKUP". If you need something different you can pass an extra hash for shipping details
shipping_details = {
:packaging_type => "YOUR_PACKAGING",
:drop_off_type => "REGULAR_PICKUP"
}
Create a Fedex::Shipment
object using your FedEx credentials; mode should be
either production or development depending on what Fedex environment you want to use.
require 'fedex'
fedex = Fedex::Shipment.new(:key => 'xxx',
:password => 'xxxx',
:account_number => 'xxxx',
:meter => 'xxx',
:mode => 'production')
To find a shipping rate:
rate = fedex.rate(:shipper=>shipper,
:recipient => recipient,
:packages => packages,
:service_type => "FEDEX_GROUND",
:shipping_details => shipping_details)
Fedex provides multiple total values; total_net_charge
is the final amount you are looking for.
$ rate.total_net_charge => "34.03"
# Complete response
$ <Fedex::Rate:0x1019ba5f8
@total_net_charge="34.03",
@total_surcharges="1.93",
@total_billing_weight="8.0 LB",
@total_taxes="0.0",
@rate_type="PAYOR_ACCOUNT_PACKAGE",
@total_base_charge="32.1",
@total_freight_discounts=nil,
@total_net_freight="32.1",
@rate_zone="51">
To create a label for a shipment:
label = fedex.label(:filename => "my_dir/example.pdf",
:shipper=>shipper,
:recipient => recipient,
:packages => packages,
:service_type => "FEDEX_GROUND",
:shipping_details => shipping_details)
The label will be saved to the file system as the filename you specify and is Adobe PDF format. Note that you can currently print a label for a single package at a time.
Fedex::Shipment::SERVICE_TYPES
Fedex::Shipment::PACKAGING_TYPES
Fedex::Shipment::DROP_OFF_TYPES
- jazminschroeder (Jazmin Schroeder)
- parndt (Philip Arndt)
Copyright 2011 Jazmin Schroeder
This gem is made available under the MIT license.