/// <summary> /// Gets available shipping options /// </summary> /// <param name="shipmentPackage">Shipment package</param> /// <param name="error">Error</param> /// <returns>Shipping options</returns> public List<ShippingOption> GetShippingOptions(ShipmentPackage shipmentPackage, ref string error) { var shippingOptions = new List<ShippingOption>(); if (shipmentPackage == null) throw new ArgumentNullException("shipmentPackage"); if (shipmentPackage.Items == null) throw new NopException("No shipment items"); if (shipmentPackage.ShippingAddress == null) { error = "Shipping address is not set"; return shippingOptions; } if (shipmentPackage.ShippingAddress.Country == null) { error = "Shipping country is not set"; return shippingOptions; } RateRequest request = CreateRateRequest(shipmentPackage); RateService service = new RateService(); // Initialize the service service.Url = IoC.Resolve<ISettingManager>().GetSettingValue("ShippingRateComputationMethod.FedEx.URL"); try { // This is the call to the web service passing in a RateRequest and returning a RateReply var reply = service.getRates(request); // Service call if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful { if (reply != null && reply.RateReplyDetails != null) { shippingOptions = ParseResponse(reply); } else { if (reply!=null && reply.Notifications != null && reply.Notifications.Length > 0 && !String.IsNullOrEmpty(reply.Notifications[0].Message)) { error = string.Format("{0} (code: {1})", reply.Notifications[0].Message, reply.Notifications[0].Code); } else { error = "Could not get reply from shipping server"; } } } else { Debug.WriteLine(reply.Notifications[0].Message); error = reply.Notifications[0].Message; } } catch (SoapException e) { Debug.WriteLine(e.Detail.InnerText); error = e.Detail.InnerText; } catch (Exception e) { Debug.WriteLine(e.Message); error = e.Message; } return shippingOptions; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="ShipmentPackage">Shipment package</param> /// <param name="Error">Error</param> /// <returns>Shipping options</returns> public ShippingOptionCollection GetShippingOptions(ShipmentPackage ShipmentPackage, ref string Error) { ShippingOptionCollection shippingOptions = new ShippingOptionCollection(); if (ShipmentPackage == null) throw new ArgumentNullException("ShipmentPackage"); if (ShipmentPackage.Items == null) throw new NopException("No shipment items"); if (ShipmentPackage.ShippingAddress == null) { Error = "Shipping address is not set"; return shippingOptions; } if (ShipmentPackage.ShippingAddress.Country == null) { Error = "Shipping country is not set"; return shippingOptions; } MeasureWeight baseWeightIn = MeasureManager.BaseWeightIn; if (baseWeightIn.SystemKeyword != "lb") throw new NopException("USPS shipping service. Base weight should be set to lb(s)"); MeasureDimension baseDimensionIn = MeasureManager.BaseDimensionIn; if (baseDimensionIn.SystemKeyword != "inches") throw new NopException("USPS shipping service. Base dimension should be set to inch(es)"); RateRequest request = CreateRateRequest(ShipmentPackage); RateService service = new RateService(); // Initialize the service service.Url = SettingManager.GetSettingValue("ShippingRateComputationMethod.FedEx.URL"); try { // This is the call to the web service passing in a RateRequest and returning a RateReply RateReply reply = service.getRates(request); // Service call // if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful { if (reply != null && reply.RateReplyDetails != null) { shippingOptions = ParseResponse(reply); } else { Error = "Could not get reply from shipping server"; } } else { Debug.WriteLine(reply.Notifications[0].Message); Error = reply.Notifications[0].Message; } } catch (SoapException e) { Debug.WriteLine(e.Detail.InnerText); Error = e.Detail.InnerText; } catch (Exception e) { Debug.WriteLine(e.Message); Error = e.Message; } if (String.IsNullOrEmpty(Error) && shippingOptions.Count == 0) Error = "Shipping options could not be loaded"; return shippingOptions; }