public InternationalResponse ValidateRequest(InternationalRequest request) { InternationalResponse result = new InternationalResponse(); if (request == null) { result.Errors.Add(new USPSError() { Description = "Request was null" }); return(result); } if (request.Packages.Count < 1) { result.Errors.Add(new USPSError() { Description = "Request requires at least one package." }); } if (request.UserId.Trim().Length < 1) { result.Errors.Add(new USPSError() { Description = "UserId is Required for Requests" }); } return(result); }
public InternationalResponse ProcessRequest(InternationalRequest request) { this.LastResponse = string.Empty; this.LastRequest = string.Empty; // Validate Request First InternationalResponse result = ValidateRequest(request); if (result.Errors.Count > 0) { return(result); } try { string sURL = request.ApiUrl; sURL += "?API=IntlRateV2&XML="; // Build XML string requestXml = string.Empty; StringWriter sw = new StringWriter(System.Globalization.CultureInfo.InvariantCulture); XmlTextWriter xw = new XmlTextWriter(sw); xw.Formatting = Formatting.None; // Start Request xw.WriteStartElement("IntlRateV2Request"); xw.WriteAttributeString("USERID", request.UserId); xw.WriteElementString("Revision", request.Revision); foreach (InternationalPackage pak in request.Packages) { pak.WriteToXml(ref xw); } //End Rate Request xw.WriteEndElement(); xw.Flush(); xw.Close(); requestXml = sw.GetStringBuilder().ToString(); if (!requestXml.StartsWith("<")) { requestXml = requestXml.Substring(1, requestXml.Length - 1); } // Diagnostics this.LastRequest = requestXml; string sResponse = string.Empty; string dataToSend = sURL + System.Web.HttpUtility.UrlEncode(requestXml); sResponse = readHtmlPage(dataToSend); // Diagnostics this.LastResponse = sResponse; result = new InternationalResponse(sResponse); } catch (Exception ex) { result.Errors.Add(new USPSError() { Description = ex.Message + " " + ex.StackTrace, Source = "BV Exception" }); } return(result); }
public InternationalResponse ValidateRequest(InternationalRequest request) { InternationalResponse result = new InternationalResponse(); if (request == null) { result.Errors.Add(new USPSError() { Description = "Request was null" }); return result; } if (request.Packages.Count < 1) { result.Errors.Add(new USPSError() { Description = "Request requires at least one package." }); } if (request.UserId.Trim().Length < 1) { result.Errors.Add(new USPSError() { Description = "UserId is Required for Requests" }); } return result; }
public InternationalResponse ProcessRequest(InternationalRequest request) { this.LastResponse = string.Empty; this.LastRequest = string.Empty; // Validate Request First InternationalResponse result = ValidateRequest(request); if (result.Errors.Count > 0) return result; try { string sURL = request.ApiUrl; sURL += "?API=IntlRateV2&XML="; // Build XML string requestXml = string.Empty; StringWriter sw = new StringWriter(System.Globalization.CultureInfo.InvariantCulture); XmlTextWriter xw = new XmlTextWriter(sw); xw.Formatting = Formatting.None; // Start Request xw.WriteStartElement("IntlRateV2Request"); xw.WriteAttributeString("USERID", request.UserId); xw.WriteElementString("Revision", request.Revision); foreach (InternationalPackage pak in request.Packages) { pak.WriteToXml(ref xw); } //End Rate Request xw.WriteEndElement(); xw.Flush(); xw.Close(); requestXml = sw.GetStringBuilder().ToString(); if (!requestXml.StartsWith("<")) { requestXml = requestXml.Substring(1, requestXml.Length - 1); } // Diagnostics this.LastRequest = requestXml; string sResponse = string.Empty; string dataToSend = sURL + System.Web.HttpUtility.UrlEncode(requestXml); sResponse = readHtmlPage(dataToSend); // Diagnostics this.LastResponse = sResponse; result = new InternationalResponse(sResponse); } catch (Exception ex) { result.Errors.Add(new USPSError() { Description = ex.Message + " " + ex.StackTrace, Source = "BV Exception" }); } return result; }
private List<IShippingRate> RatePackages(List<InternationalPackage> packages) { List<IShippingRate> rates = new List<IShippingRate>(); InternationalRequest req = new InternationalRequest(); req.Packages = packages; InternationalService svc = new InternationalService(); InternationalResponse res = svc.ProcessRequest(req); if (this.GlobalSettings.DiagnosticsMode) { _Logger.LogMessage("US Postal Intl. Request: " + svc.LastRequest); _Logger.LogMessage("US Postal Intl. Response: " + svc.LastResponse); } bool hasErrors = (res.Errors.Count > 0); foreach (InternationalServiceType possibleResponse in Enum.GetValues(typeof(InternationalServiceType))) { bool AllPackagesRated = true; decimal totalRate = 0m; string serviceDesciption = string.Empty; foreach (InternationalPackage p in res.Packages) { InternationalPostage found = p.Postages.Where(y => y.ServiceId == ((int)possibleResponse).ToString()).FirstOrDefault(); if (found == null) { AllPackagesRated = false; break; } totalRate += found.Rate; serviceDesciption = System.Web.HttpUtility.HtmlDecode(found.ServiceDescription); } if (AllPackagesRated && totalRate > 0) { // Rate is good to go for all packages rates.Add(new ShippingRate() { EstimatedCost = totalRate, ServiceId = this.Id, ServiceCodes = ((int)possibleResponse).ToString(), DisplayName = "USPS:" + serviceDesciption}); } } return rates; }