using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.Services.Protocols; using System.IO; using NetLibrary.Log; using NetLibrary.Data; using System.Data.Common; using System.Data; using TradeManageNew.RateWebReference; using System.Net; using Newtonsoft.Json; using System.Net.Http.Headers; using System.Net.Http; using System.Diagnostics.Eventing.Reader; using NetLibrary; namespace TradeManageNew { public class UPSRate { const string client_id = "NeG6fE37MEZAjzzWebCyd1gM78jUa5kt741VJLmiiF0mKx5D"; const string client_secret = "f7jmbk077R94iTzW3gKRBePReNjqR6XtoHxZ5q10cvxmUrxxcG6m0Kdm61oEGhmY"; public static string AccessLicenseNumber = ""; public static string Username = ""; public static string Password = ""; public static string ShipperNumber = ""; public string GetFee(FedexFeeMdNew md) { try { RateService rate = new RateService(); RateRequest rateRequest = new RateRequest(); UPSSecurity upss = new UPSSecurity(); UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken(); upssSvcAccessToken.AccessLicenseNumber = AccessLicenseNumber;// "2D7E03BB362512B5";//4D80C6335333C435 upss.ServiceAccessToken = upssSvcAccessToken; UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken(); upssUsrNameToken.Username = Username;// "simon@nbboson.com"; upssUsrNameToken.Password = Password;// "Km28862820"; upss.UsernameToken = upssUsrNameToken; rate.UPSSecurityValue = upss; RequestType request = new RequestType(); String[] requestOption = { "Rate" }; request.RequestOption = requestOption; rateRequest.Request = request; ShipmentType shipment = new ShipmentType(); ShipperType shipper = new ShipperType(); shipper.ShipperNumber = ShipperNumber;// "RE8474"; RateWebReference.AddressType shipperAddress = new RateWebReference.AddressType(); String[] addressLine = {md.SendAddr };// { "5555 main", "4 Case Cour", "Apt 3B" };Id CompanyId SendName SendEnglishName Address EnglishAddress Phone PostCode province city county street provincecode citycode // 3 1 bosonshop Karmas Far Inc 2611 E LINDSAY PRIVADO 2611 E LINDSAY PRIVADO 9012637906 91761 CA ONTARIO US 315000 CA ONTARIO shipperAddress.AddressLine = addressLine; shipperAddress.City = md.SendCity;// "ONTARIO"; shipperAddress.PostalCode = md.SendPostCode;// "91761"; shipperAddress.StateProvinceCode = md.SendProv;// "CA"; shipperAddress.CountryCode = md.SendCountry;// "US"; shipperAddress.AddressLine = addressLine; shipper.Address = shipperAddress; shipment.Shipper = shipper; ShipFromType shipFrom = new ShipFromType(); RateWebReference.ShipAddressType shipFromAddress = new RateWebReference.ShipAddressType(); shipFromAddress.AddressLine = addressLine; shipFromAddress.City = md.SendCity;// "ONTARIO"; shipFromAddress.PostalCode = md.SendPostCode;//"91761"; shipFromAddress.StateProvinceCode=md.SendProv;// "CA"; shipFromAddress.CountryCode = md.SendCountry;//"US"; shipFrom.Address = shipFromAddress; shipment.ShipFrom = shipFrom; ShipToType shipTo = new ShipToType(); ShipToAddressType shipToAddress = new ShipToAddressType(); String[] addressLine1 = {md.RevAddr };// { "10 E. Ritchie Way", "2", "Apt 3B" }; shipToAddress.AddressLine = addressLine1; shipToAddress.City = md.RevCity;// "RENO"; shipToAddress.PostalCode = md.RevPostCode;// "89509"; shipToAddress.StateProvinceCode = md.RevProv;// "NV"; shipToAddress.CountryCode = md.RevCountry;// "US"; shipTo.Address = shipToAddress; shipment.ShipTo = shipTo; ShipmentRatingOptionsType shipmentRatingOptions = new ShipmentRatingOptionsType(); shipmentRatingOptions.NegotiatedRatesIndicator = "1"; shipment.ShipmentRatingOptions = shipmentRatingOptions; //shipmentRatingOptions.FRSShipmentIndicator = "1"; //shipmentRatingOptions.RateChartIndicator = "1"; //shipmentRatingOptions.UserLevelDiscountIndicator = "1"; CodeDescriptionType service = new CodeDescriptionType(); //92= UPS SurePost® Less than 1 lb 93 = UPS SurePost® 1 lb or Greater 94 = UPS SurePost® BPM 95 = UPS SurePost® Media //Below code uses dummy date for reference. Please udpate as required. service.Code = md.PostType;// "03"; shipment.Service = service; PackageType package = new PackageType(); PackageWeightType packageWeight = new PackageWeightType(); packageWeight.Weight = md.Weight.ToString();// "36"; CodeDescriptionType uom = new CodeDescriptionType(); uom.Code = "LBS"; uom.Description = "pounds"; packageWeight.UnitOfMeasurement = uom; package.PackageWeight = packageWeight; CodeDescriptionType packType = new CodeDescriptionType(); packType.Code = md.packType;// "02"; package.PackagingType = packType; DimensionsType dm = new DimensionsType(); dm.Height = md.Height; dm.Length = md.Lenght; dm.Width = md.Width; CodeDescriptionType uom2 = new CodeDescriptionType(); uom2.Code = "IN"; uom2.Description = "inches"; dm.UnitOfMeasurement = uom2; package.Dimensions = dm; //package.Dimensions.Length = md.Lenght; //package.Dimensions.Width = md.Width; //package.Dimensions.Height = md.Height; PackageType[] pkgArray = { package }; shipment.Package = pkgArray; rateRequest.Shipment = shipment; ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11; //This line will ensure the latest security protocol for consuming the web service call. //Console.WriteLine(rateRequest); rate.Url = "https://onlinetools.ups.com/webservices/Rate"; RateResponse rateResponse = rate.ProcessRate(rateRequest); string result = ""; result+="The transaction was a " + rateResponse.Response.ResponseStatus.Description+"
"; if(rateResponse.RatedShipment[0].NegotiatedRateCharges!=null) result += "Total Shipment NegotiatedRateCharges Charges " + rateResponse.RatedShipment[0].NegotiatedRateCharges.TotalCharge.MonetaryValue + rateResponse.RatedShipment[0].NegotiatedRateCharges.TotalCharge.CurrencyCode+"
"; result += "Total Shipment Charges " + rateResponse.RatedShipment[0].TotalCharges.MonetaryValue + rateResponse.RatedShipment[0].TotalCharges.CurrencyCode; return result; //Console.WriteLine("The transaction was a " + rateResponse.Response.ResponseStatus.Description); //Console.WriteLine("Total Shipment Charges " + rateResponse.RatedShipment[0].TotalCharges.MonetaryValue + rateResponse.RatedShipment[0].TotalCharges.CurrencyCode); //Console.ReadKey(); } //catch (System.Web.Services.Protocols.SoapException ex) //{ // Console.WriteLine(""); // Console.WriteLine("---------Rate Web Service returns error----------------"); // Console.WriteLine("---------\"Hard\" is user error \"Transient\" is system error----------------"); // Console.WriteLine("SoapException Message= " + ex.Message); // Console.WriteLine(""); // Console.WriteLine("SoapException Category:Code:Message= " + ex.Detail.LastChild.InnerText); // Console.WriteLine(""); // Console.WriteLine("SoapException XML String for all= " + ex.Detail.LastChild.OuterXml); // Console.WriteLine(""); // Console.WriteLine("SoapException StackTrace= " + ex.StackTrace); // Console.WriteLine("-------------------------"); // Console.WriteLine(""); //} //catch (System.ServiceModel.CommunicationException ex) //{ // Console.WriteLine(""); // Console.WriteLine("--------------------"); // Console.WriteLine("CommunicationException= " + ex.Message); // Console.WriteLine("CommunicationException-StackTrace= " + ex.StackTrace); // Console.WriteLine("-------------------------"); // Console.WriteLine(""); //} catch (Exception ex) { Console.WriteLine(""); Console.WriteLine("-------------------------"); Console.WriteLine(" Generaal Exception= " + ex.Message); Console.WriteLine(" Generaal Exception-StackTrace= " + ex.StackTrace); Console.WriteLine("-------------------------"); return "error:"+ex.Message; } //finally //{ // Console.ReadKey(); // return ""; //} } public string GetFeeNew(FedexFeeMdNew md) { try { //var URL = "https://wwwcie.ups.com/api/rating/v2205/Rate";//测试地址 var URL = "https://onlinetools.ups.com/api/rating/v2205/Rate";//正式地址 var inquiryNumber = DateTime.Now.ToString("yyyyMMddhhmmss"); var token = UPSTokenHelp.GetUPSToken(); // 创建HttpClient实例 HttpClient client = new HttpClient(); // 设置Basic Auth验证 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); //生成一个随机数 var random = new Random().Next(1000, 9990); // 添加自定义Header client.DefaultRequestHeaders.Add("transId", inquiryNumber + random.ToString() + "Id"); client.DefaultRequestHeaders.Add("transactionSrc", inquiryNumber + random.ToString() + "Src"); // 创建 HttpRequestMessage 实例 var request = new HttpRequestMessage(HttpMethod.Post, URL); //根据输入商品的长宽高计算运费,不使用SimpleRate计算 var rating = new RateRequestModel() { RateRequest = new RateRequestNew { Request = new Request { RequestOption = "Rate", SubVersion = "2205", TransactionReference = new TransactionReference { CustomerContext = "Retrieve negotiated rates" } }, PickupType = new PickupType { Code = "01" }, Shipment = new Shipment { Shipper = new Shipper { Name = "", ShipperNumber = ShipperNumber, Address = new AddressFrom { AddressLine = new List() { md.SendAddr }, City = md.SendCity, StateProvinceCode = md.SendProv, PostalCode = md.SendPostCode, CountryCode = md.SendCountry } }, ShipTo = new ShipTo { Name = "", Address = new AddressTo { AddressLine = new List() { md.RevAddr }, City = md.RevCity, StateProvinceCode = md.RevProv, PostalCode = md.RevPostCode, CountryCode = md.RevCountry, ResidentialAddressIndicator = "True" } }, ShipFrom = new ShipFrom { Name = "", Address = new AddressFrom { AddressLine = new List() { md.SendAddr }, City = md.SendCity, StateProvinceCode = md.SendProv, PostalCode = md.SendPostCode, CountryCode = md.SendCountry } }, PaymentDetails = new PaymentDetails { ShipmentCharge = new List { new ShipmentCharge { Type = "01", BillShipper = new BillShipper { AccountNumber = ShipperNumber } } }, }, ShipmentRatingOptions=new ShipmentRatingOptions { TPFCNegotiatedRatesIndicator="Y", NegotiatedRatesIndicator="Y" }, Service = new Service { Code = md.PostType, Description = "", }, NumOfPieces = md.TotalNum, Package = new List { new Package { //SimpleRate=new CodeAndDescription //{ // Code=sizeCode, // Description="", //}, PackagingType = new TypeModel { Code = md.packType, Description = "" }, Dimensions = new DimensionsNew { UnitOfMeasurement = new UnitOfMeasurement { Code = "IN", Description = "Inches" }, Length = md.Lenght, Width = md.Width, Height = md.Height, }, PackageWeight = new ShipmentTotalWeight { UnitOfMeasurement = new UnitOfMeasurement { Code = "LBS", Description = "Pounds", }, Weight = md.Weight.ToString(), } } }, //RateInformation = new RateInformation //{ // NegotiatedRatesIndicator = true //} } } }; var bodyStr = JsonConvert.SerializeObject(rating); //var bodyStr = "{\"FreightRateRequest\":{\"ShipFrom\":{\"Name\":\"Test US Shipper\",\"Address\":{\"AddressLine\":\"123 Lane\",\"City\":\"TIMONIUM\",\"StateProvinceCode\":\"MD\",\"PostalCode\":\"21093\",\"CountryCode\":\"US\",\"ResidentialAddressIndicator\":\"\"},\"AttentionName\":\"Test Shipper\",\"Phone\":{\"Number\":\"4444444444\",\"Extension\":\"4444\"},\"EMailAddress\":\"gcc0htq@ups.com\"},\"ShipperNumber\":\"44434A\",\"ShipTo\":{\"Name\":\"Dilbert's Derbies\",\"Address\":{\"AddressLine\":\"555 Main St\",\"City\":\"LOUISVILLE\",\"StateProvinceCode\":\"KY\",\"PostalCode\":\"40201\",\"CountryCode\":\"US\"},\"AttentionName\":\"Dilbert\",\"Phone\":{\"Number\":\"8459865555\"}},\"PaymentInformation\":{\"Payer\":{\"Name\":\"Test US Shipper\",\"Address\":{\"AddressLine\":\"123 Lane\",\"City\":\"LUTHERVILLE TIMONIUM\",\"StateProvinceCode\":\"MD\",\"PostalCode\":\"21093\",\"CountryCode\":\"US\"},\"ShipperNumber\":\"AT0123\",\"AccountType\":\"1\",\"AttentionName\":\"Test Shipper\",\"Phone\":{\"Number\":\"4444444444\",\"Extension\":\"4444\"},\"EMailAddress\":\"gcc0htq@ups.com\"},\"ShipmentBillingOption\":{\"Code\":\"10\"}},\"Service\":{\"Code\":\"308\"},\"Commodity\":{\"Description\":\"FRS-Freight\",\"Weight\":{\"UnitOfMeasurement\":{\"Code\":\"LBS\"},\"Value\":\"150\"},\"Dimensions\":{\"UnitOfMeasurement\":{\"Code\":\"IN\",\"Description\":\" \"},\"Length\":\"9\",\"Width\":\"5\",\"Height\":\"4\"},\"NumberOfPieces\":\"1\",\"PackagingType\":{\"Code\":\"PLT\"},\"FreightClass\":\"60\"},\"DensityEligibleIndicator\":\"\",\"AlternateRateOptions\":{\"Code\":\"3\"},\"PickupRequest\":{\"PickupDate\":\"20170923\"},\"GFPOptions\":{\"GPFAccesorialRateIndicator\":\"\"},\"TimeInTransitIndicator\":\"\"}}"; request.Content = new StringContent(bodyStr, System.Text.Encoding.UTF8, "application/json"); ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // 发送 POST 请求并返回响应结果 var response = client.SendAsync(request).Result; var result = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); var resObj = JsonConvert.DeserializeObject(result); if (resObj.RateResponse == null) return "ErrorMessage:" + result; var ratedPackage = JsonConvert.SerializeObject(resObj.RateResponse.RatedShipment.RatedPackage); if (resObj.RateResponse!=null && resObj.RateResponse.RatedShipment!=null && resObj.RateResponse.RatedShipment.TotalCharges!=null) { //var resultStr = ""; if(resObj.RateResponse.RatedShipment.NegotiatedRateCharges!=null && resObj.RateResponse.RatedShipment.NegotiatedRateCharges.TotalCharge != null) { return resObj.RateResponse.RatedShipment.NegotiatedRateCharges.TotalCharge.MonetaryValue + "&" + ratedPackage; //resultStr += "Total Shipment NegotiatedRateCharges Charges " + resObj.RateResponse.RatedShipment.NegotiatedRateCharges.TotalCharge.MonetaryValue + resObj.RateResponse.RatedShipment.NegotiatedRateCharges.TotalCharge.CurrencyCode + "
"; } //resultStr += "Total Shipment Charges " + resObj.RateResponse.RatedShipment.TotalCharges.MonetaryValue + resObj.RateResponse.RatedShipment.TotalCharges.CurrencyCode; //return resultStr + "||" + test; } return "ErrorMessage:" + ratedPackage; } catch (Exception ex) { return "ErrorMessage:" + ex.Message; } } } }