Skip to content

alexeybusygin/ShippingRates

Repository files navigation

ShippingRates

Build NuGet Version

ShippingRates is a .NET library for retrieving shipping rates from UPS, FedEx, USPS, and DHL APIs.

Why Use It

  • Query multiple carriers through one RateManager
  • Work with sync or async APIs
  • Support multiple packages in a single shipment
  • Apply shipment-level options such as Saturday delivery
  • Extend returned prices with custom rate adjusters

Supported Platforms

  • .NET 6+
  • .NET Standard 2.0
  • .NET Framework 4.6.1+

Install

Available on NuGet:

dotnet add package ShippingRates

Choose Your Path

Upgrade Notes

ShippingRates 4.x includes FedEx breaking changes and uses the modern FedEx REST API with OAuth 2.0.

If you are upgrading an existing integration, start with Breaking changes.

Quick Start

using System.Collections.Generic;
using System.Net.Http;
using ShippingRates;
using ShippingRates.ShippingProviders.FedEx;
using ShippingRates.ShippingProviders;
using ShippingRates.ShippingProviders.Usps;

using var httpClient = new HttpClient();

var rateManager = new RateManager();

var upsConfiguration = new UPSProviderConfiguration
{
    ClientId = upsClientId,
    ClientSecret = upsClientSecret,
    AccountNumber = upsAccountNumber,
    UseProduction = false
};
rateManager.AddProvider(new UPSProvider(upsConfiguration, httpClient));

var fedExConfiguration = new FedExProviderConfiguration
{
    ClientId = fedexClientId,
    ClientSecret = fedexClientSecret,
    AccountNumber = fedexAccountNumber,
    HubId = fedexHubId,
    UseProduction = false
};
rateManager.AddProvider(new FedExProvider(fedExConfiguration, httpClient));

var uspsConfiguration = new UspsProviderConfiguration
{
    ClientId = uspsClientId,
    ClientSecret = uspsClientSecret,
    UseProduction = false
};
rateManager.AddProvider(new UspsProvider(uspsConfiguration, httpClient));

var dhlConfiguration = new DHLProviderConfiguration(dhlSiteId, dhlPassword, useProduction: false);
rateManager.AddProvider(new DHLProvider(dhlConfiguration, httpClient));

var packages = new List<Package>
{
    new Package(12, 12, 12, 35, 150),
    new PackageKgCm(4, 4, 6, 15, 250)
};

var origin = new Address("", "CT", "06405", "US");
var destination = new Address("", "", "20852", "US");

Shipment shipment = await rateManager.GetRatesAsync(origin, destination, packages);

foreach (Rate rate in shipment.Rates)
{
    Console.WriteLine(rate);
}

The sample app in SampleApp/Program.cs shows a fuller end-to-end setup.

Carrier Setup

Use the carrier-specific setup pages for constructor overloads, configuration options, and examples:

Shipment Options

Pass shipment-level options through ShipmentOptions:

var shipment = await rateManager.GetRatesAsync(
    origin,
    destination,
    packages,
    new ShipmentOptions
    {
        SaturdayDelivery = true,
        ShippingDate = new DateTime(2020, 7, 15),
        PreferredCurrencyCode = "EUR",
        FedExOneRate = true,
        FedExPackagingTypeOverride = FedExPackagingType.FedExEnvelope
    });
Name Default Meaning
SaturdayDelivery false Request Saturday delivery rates when available.
ShippingDate null Pickup date. Uses the current date and time when omitted.
PreferredCurrencyCode USD Preferred ISO currency code for FedEx rates.
FedExOneRate false Enable FedEx One Rate pricing.
FedExPackagingTypeOverride null Override the FedEx packaging type for the shipment.
FedExOneRatePackageOverride null Legacy FedEx One Rate override. Prefer FedExPackagingTypeOverride.

If ShipmentOptions.SaturdayDelivery is enabled, inspect Rate.Options.SaturdayDelivery on returned rates:

var anySaturdayDeliveryMethods = shipment.Rates.Any(r => r.Options.SaturdayDelivery);

Error Handling

RateManager.GetRates and RateManager.GetRatesAsync aggregate provider responses into:

  • shipment.Errors for carrier/API errors that are generally safe to surface to end users
  • shipment.InternalErrors for internal processing failures and diagnostics
foreach (var error in shipment.Errors)
{
    Console.WriteLine(error.Number);
    Console.WriteLine(error.Source);
    Console.WriteLine(error.Description);
}

foreach (var error in shipment.InternalErrors)
{
    Console.WriteLine(error);
}

Documentation

Credits

Originally forked from DotNetShipping by @kylewest. Package icon by Fredy Sujono.

About

.NET wrapper for UPS, FedEx, USPS and DHL shipping rate APIs

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages