I want to integrate the Fedex web services in my Asp.Net project. I downloaded the C# sample files from the Fedex website and also having the Fedex testing credentials. I replaced the credentials in the sample files and while run the coding i got output. Here i want to know how the files are working, how they call the web service, and in which format they return response.
using System;
using System.Web.Services.Protocols;
using RateAvailableServiceWebServiceClient.RateServiceWebReference;
namespace RateAvailableServiceWebServiceClient
{
class Program
{
static void Main(string[] args)
{
RateRequest request = CreateRateRequest();
RateService service = new RateService();
try
{
RateReply reply = service.getRates(request);
if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING)
{
ShowRateReply(reply);
}
ShowNotifications(reply);
}
catch (SoapException e)
{
Console.WriteLine(e.Detail.InnerText);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("Press any key to quit!");
Console.ReadKey();
}
private static RateRequest CreateRateRequest()
{
RateRequest request = new RateRequest();
request.WebAuthenticationDetail = new WebAuthenticationDetail();
request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential();
request.WebAuthenticationDetail.UserCredential.Key = "XXX";
request.WebAuthenticationDetail.UserCredential.Password = "XXX";
request.ClientDetail = new ClientDetail();
request.ClientDetail.AccountNumber = "XXX";
request.ClientDetail.MeterNumber = "XXX";
request.TransactionDetail = new TransactionDetail();
request.TransactionDetail.CustomerTransactionId = "***Rate Available Services v10 Request using VC#***";
request.Version = new VersionId();
request.ReturnTransitAndCommit = true;
request.ReturnTransitAndCommitSpecified = true;
SetShipmentDetails(request);
return request;
}
private static void SetShipmentDetails(RateRequest request)
{
request.RequestedShipment = new RequestedShipment();
request.RequestedShipment.ShipTimestamp = DateTime.Now;
request.RequestedShipment.ShipTimestampSpecified = true;
request.RequestedShipment.DropoffType = DropoffType.REGULAR_PICKUP;
request.RequestedShipment.DropoffTypeSpecified = true;
request.RequestedShipment.PackagingType = PackagingType.YOUR_PACKAGING;
request.RequestedShipment.PackagingTypeSpecified = true;
SetOrigin(request);
SetDestination(request);
SetPackageLineItems(request);
request.RequestedShipment.RateRequestTypes = new RateRequestType[2];
request.RequestedShipment.RateRequestTypes[0] = RateRequestType.ACCOUNT;
request.RequestedShipment.RateRequestTypes[1] = RateRequestType.LIST;
request.RequestedShipment.PackageCount = "1";
bool isCodShipment = true;
if (isCodShipment)
SetCOD(request);
}
private static void SetOrigin(RateRequest request)
{
request.RequestedShipment.Shipper = new Party();
request.RequestedShipment.Shipper.Address = new Address();
request.RequestedShipment.Shipper.Address.StreetLines = new string[1] { " ADDRESS LINE 1" };
request.RequestedShipment.Shipper.Address.City = "Austin";
request.RequestedShipment.Shipper.Address.StateOrProvinceCode = "TX";
request.RequestedShipment.Shipper.Address.PostalCode = "73301";
request.RequestedShipment.Shipper.Address.CountryCode = "US";
}
private static void SetDestination(RateRequest request)
{
request.RequestedShipment.Recipient = new Party();
request.RequestedShipment.Recipient.Address = new Address();
request.RequestedShipment.Recipient.Address.StreetLines = new string[1] { "RECIPIENT ADDRESS LINE 1" };
request.RequestedShipment.Recipient.Address.City = "Collierville";
request.RequestedShipment.Recipient.Address.StateOrProvinceCode = "TN";
request.RequestedShipment.Recipient.Address.PostalCode = "38017";
request.RequestedShipment.Recipient.Address.CountryCode = "US";
}
private static void SetPackageLineItems(RateRequest request)
{
request.RequestedShipment.RequestedPackageLineItems = new RequestedPackageLineItem[1];
request.RequestedShipment.RequestedPackageLineItems[0] = new RequestedPackageLineItem();
request.RequestedShipment.RequestedPackageLineItems[0].SequenceNumber = "1";
request.RequestedShipment.RequestedPackageLineItems[0].GroupPackageCount = "1";
request.RequestedShipment.RequestedPackageLineItems[0].Weight = new Weight();
request.RequestedShipment.RequestedPackageLineItems[0].Weight.Units = WeightUnits.LB;
request.RequestedShipment.RequestedPackageLineItems[0].Weight.Value = 15.0M;
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions = new Dimensions();
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Length = "12";
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Width = "13";
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Height = "14";
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Units = LinearUnits.IN;
}
private static void SetCOD(RateRequest request)
{
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested = new PackageSpecialServicesRequested();
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.SpecialServiceTypes = new PackageSpecialServiceType[1];
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.SpecialServiceTypes[0] = PackageSpecialServiceType.COD;
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.CodDetail = new CodDetail();
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.CodDetail.CollectionType = CodCollectionType.GUARANTEED_FUNDS;
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.CodDetail.CodCollectionAmount = new Money();
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.CodDetail.CodCollectionAmount.Amount = 250;
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.CodDetail.CodCollectionAmount.AmountSpecified = true;
request.RequestedShipment.RequestedPackageLineItems[0].SpecialServicesRequested.CodDetail.CodCollectionAmount.Currency = "USD";
request.RequestedShipment.SpecialServicesRequested = new ShipmentSpecialServicesRequested();
request.RequestedShipment.SpecialServicesRequested.SpecialServiceTypes = new ShipmentSpecialServiceType[1];
request.RequestedShipment.SpecialServicesRequested.SpecialServiceTypes[0] = ShipmentSpecialServiceType.COD;
request.RequestedShipment.SpecialServicesRequested.CodDetail = new CodDetail();
request.RequestedShipment.SpecialServicesRequested.CodDetail.CodCollectionAmount = new Money();
request.RequestedShipment.SpecialServicesRequested.CodDetail.CodCollectionAmount.Amount = 150;
request.RequestedShipment.SpecialServicesRequested.CodDetail.CodCollectionAmount.AmountSpecified = true;
request.RequestedShipment.SpecialServicesRequested.CodDetail.CodCollectionAmount.Currency = "USD";
request.RequestedShipment.SpecialServicesRequested.CodDetail.CollectionType = CodCollectionType.GUARANTEED_FUNDS;
}
private static void ShowRateReply(RateReply reply)
{
Console.WriteLine("RateReply details:");
for (int i = 0; i < reply.RateReplyDetails.Length;i++ )
{
RateReplyDetail rateReplyDetail = reply.RateReplyDetails[i];
Console.WriteLine("Rate Reply Detail for Service {0} ", i+1);
if(rateReplyDetail.ServiceTypeSpecified)
Console.WriteLine("Service Type: {0}" , rateReplyDetail.ServiceType);
if(rateReplyDetail.PackagingTypeSpecified)
Console.WriteLine("Packaging Type: {0}" , rateReplyDetail.PackagingType);
for (int j = 0; j < rateReplyDetail.RatedShipmentDetails.Length;j++ )
{
RatedShipmentDetail shipmentDetail = rateReplyDetail.RatedShipmentDetails[j];
Console.WriteLine("---Rated Shipment Detail for Rate Type {0}---", j + 1);
ShowShipmentRateDetails(shipmentDetail);
ShowPackageRateDetails(shipmentDetail.RatedPackages);
}
ShowDeliveryDetails(rateReplyDetail);
Console.WriteLine("**********************************************************");
}
}
private static void ShowShipmentRateDetails(RatedShipmentDetail shipmentDetail)
{
if (shipmentDetail == null) return;
if (shipmentDetail.ShipmentRateDetail == null) return;
ShipmentRateDetail rateDetail = shipmentDetail.ShipmentRateDetail;
Console.WriteLine("--- Shipment Rate Detail ---");
Console.WriteLine("RateType: {0} ", rateDetail.RateType);
if (rateDetail.TotalBillingWeight != null) Console.WriteLine("Total Billing Weight: {0} {1}", rateDetail.TotalBillingWeight.Value, shipmentDetail.ShipmentRateDetail.TotalBillingWeight.Units);
if (rateDetail.TotalBaseCharge != null) Console.WriteLine("Total Base Charge: {0} {1}", rateDetail.TotalBaseCharge.Amount, rateDetail.TotalBaseCharge.Currency);
if (rateDetail.TotalFreightDiscounts != null) Console.WriteLine("Total Freight Discounts: {0} {1}", rateDetail.TotalFreightDiscounts.Amount, rateDetail.TotalFreightDiscounts.Currency);
if (rateDetail.TotalSurcharges != null) Console.WriteLine("Total Surcharges: {0} {1}", rateDetail.TotalSurcharges.Amount, rateDetail.TotalSurcharges.Currency);
if (rateDetail.Surcharges != null)
{
foreach (Surcharge surcharge in rateDetail.Surcharges)
Console.WriteLine(" {0} surcharge {1} {2}", surcharge.SurchargeType, surcharge.Amount.Amount, surcharge.Amount.Currency);
}
if (rateDetail.TotalNetCharge != null) Console.WriteLine("Total Net Charge: {0} {1}", rateDetail.TotalNetCharge.Amount, rateDetail.TotalNetCharge.Currency);
}
private static void ShowPackageRateDetails(RatedPackageDetail[] ratedPackages)
{
if (ratedPackages == null) return;
Console.WriteLine("--- Rated Package Detail ---");
for(int i = 0;i < ratedPackages.Length;i++)
{
RatedPackageDetail ratedPackage = ratedPackages[i];
Console.WriteLine("Package {0}", i + 1);
if (ratedPackage.PackageRateDetail != null)
{
Console.WriteLine("Billing weight {0} {1}", ratedPackage.PackageRateDetail.BillingWeight.Value, ratedPackage.PackageRateDetail.BillingWeight.Units);
Console.WriteLine("Base charge {0} {1}", ratedPackage.PackageRateDetail.BaseCharge.Amount, ratedPackage.PackageRateDetail.BaseCharge.Currency);
if (ratedPackage.PackageRateDetail.TotalSurcharges != null) Console.WriteLine("Total Surcharges: {0} {1}", ratedPackage.PackageRateDetail.TotalSurcharges.Amount, ratedPackage.PackageRateDetail.TotalSurcharges.Currency);
if (ratedPackage.PackageRateDetail.Surcharges != null)
{
foreach( Surcharge surcharge in ratedPackage.PackageRateDetail.Surcharges)
{
Console.WriteLine(" {0} surcharge {1} {2}", surcharge.SurchargeType, surcharge.Amount.Amount, surcharge.Amount.Currency);
}
}
Console.WriteLine("Net charge {0} {1}", ratedPackage.PackageRateDetail.NetCharge.Amount, ratedPackage.PackageRateDetail.NetCharge.Currency);
}
}
}
private static void ShowDeliveryDetails(RateReplyDetail rateReplyDetail)
{
if (rateReplyDetail.DeliveryTimestampSpecified)
Console.WriteLine("Delivery timestamp: " + rateReplyDetail.DeliveryTimestamp.ToString());
if (rateReplyDetail.TransitTimeSpecified)
Console.WriteLine("Transit time: " + rateReplyDetail.TransitTime);
}
private static void ShowNotifications(RateReply reply)
{
Console.WriteLine("Notifications");
for (int i = 0; i < reply.Notifications.Length; i++)
{
Notification notification = reply.Notifications[i];
Console.WriteLine("Notification no. {0}", i);
Console.WriteLine(" Severity: {0}", notification.Severity);
Console.WriteLine(" Code: {0}", notification.Code);
Console.WriteLine(" Message: {0}", notification.Message);
Console.WriteLine(" Source: {0}", notification.Source);
}
}
}
}
This is the sample code to get the Rate Available Services, which gives the available fedex services. Here i got some errors while i changed the shipper address(in SetOrigin function) and RECIPIENT address( in SetDestination function )
[edit]Removed the user specific sensitive information -Pankaj Nikam [/edit]