using System; using System.Collections.Generic; using System.Linq; using System.Web; using TradeManageNew.UpsSHIPWebReference; using System.Net; using NetLibrary.Express; using Newtonsoft.Json; using System.Net.Http.Headers; using System.Net.Http; using System.IO; using System.Drawing; namespace TradeManageNew { public class UpsShip { public static string AccessLicenseNumber = ""; public static string Username = ""; public static string Password = ""; public static string ShipperNumber = ""; public string GetTrackCode(UPSOrder md,out string error) { try { ShipService shpSvc = new ShipService(); ShipmentRequest shipmentRequest = new ShipmentRequest(); UPSSecurity upss = new UPSSecurity(); UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken(); upssSvcAccessToken.AccessLicenseNumber = AccessLicenseNumber;//"5D83BCCDEFB9A5D5";// "BCBE8EEC50CF3B56"; upss.ServiceAccessToken = upssSvcAccessToken; UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken(); upssUsrNameToken.Username = Username;// "Karmasfar"; upssUsrNameToken.Password = Password;// "Km28862820"; upss.UsernameToken = upssUsrNameToken; shpSvc.UPSSecurityValue = upss; RequestType request = new RequestType(); String[] requestOption = { "nonvalidate" }; request.RequestOption = requestOption; shipmentRequest.Request = request; ShipmentType shipment = new ShipmentType(); shipment.Description = "";// "2xKM0765"; ShipperType shipper = new ShipperType(); shipper.ShipperNumber = ShipperNumber;// "RE8474"; PaymentInfoType paymentInfo = new PaymentInfoType(); ShipmentChargeType shpmentCharge = new ShipmentChargeType(); BillShipperType billShipper = new BillShipperType(); billShipper.AccountNumber = ShipperNumber;// "RE8474"; shpmentCharge.BillShipper = billShipper; shpmentCharge.Type = "01"; ShipmentChargeType[] shpmentChargeArray = { shpmentCharge }; paymentInfo.ShipmentCharge = shpmentChargeArray; shipment.PaymentInformation = paymentInfo; ShipAddressType shipperAddress = new ShipAddressType(); String[] addressLine = { md.Rever.StreetLines };// "480 Parkton Plaza" shipperAddress.AddressLine = addressLine; shipperAddress.City = md.Rever.City;// "Timonium"; shipperAddress.PostalCode = md.Rever.PostalCode;// "91761"; shipperAddress.StateProvinceCode = md.Rever.StateOrProvinceCode;// "CA"; shipperAddress.CountryCode = md.Rever.CountryCode;// "US"; shipperAddress.AddressLine = addressLine; shipper.Address = shipperAddress; shipper.Name = md.Rever.PersonName;// "2xKM0765-s-m"; shipper.AttentionName = md.Rever.PersonName;// "2xKM0765-s-m"; ShipPhoneType shipperPhone = new ShipPhoneType(); shipperPhone.Number = md.Rever.PhoneNumber;// "1234567890"; shipper.Phone = shipperPhone; shipment.Shipper = shipper; ShipFromType shipFrom = new ShipFromType(); ShipAddressType shipFromAddress = new ShipAddressType(); String[] shipFromAddressLine = { md.Shiper.StreetLines }; shipFromAddress.AddressLine = addressLine; shipFromAddress.City = md.Shiper.City;// "Timonium"; shipFromAddress.PostalCode = md.Shiper.PostalCode;// "91761"; shipFromAddress.StateProvinceCode = md.Shiper.StateOrProvinceCode;// "CA"; shipFromAddress.CountryCode = md.Shiper.CountryCode;// "US"; shipFrom.Address = shipFromAddress; shipFrom.AttentionName = md.Shiper.PersonName;// "Mr.ABC"; shipFrom.Name = md.Shiper.PersonName;//"2xKM0765-s-m"; shipment.ShipFrom = shipFrom; ShipToType shipTo = new ShipToType(); ShipToAddressType shipToAddress = new ShipToAddressType(); String[] addressLine1 = { md.Rever.StreetLines }; shipToAddress.AddressLine = addressLine1; shipToAddress.City = md.Rever.City;// "ONTARIO"; shipToAddress.PostalCode=md.Rever.PostalCode;// "91761"; shipToAddress.CountryCode = md.Rever.CountryCode;// "US"; shipToAddress.StateProvinceCode = md.Rever.StateOrProvinceCode;// "CA"; shipTo.Address = shipToAddress; shipTo.AttentionName = md.Rever.PersonName;// "Associates"; shipTo.Name = md.Rever.PersonName;// "DEF Associates"; ShipPhoneType shipToPhone = new ShipPhoneType(); shipToPhone.Number = md.Rever.PhoneNumber;// "1234567890"; shipTo.Phone = shipToPhone; shipment.ShipTo = shipTo; ServiceType service = new ServiceType(); service.Code =md.shipservicecode;// "93"; shipment.Service = service; ShipmentTypeShipmentServiceOptions shpServiceOptions = new ShipmentTypeShipmentServiceOptions(); /** **** International Forms ***** */ // InternationalFormType internationalForms = new InternationalFormType(); /** **** Commercial Invoice ***** */ // String[] formTypeList = { "01" }; // internationalForms.FormType = formTypeList; ///** **** Contacts and Sold To ***** */ //ContactType contacts = new ContactType(); //SoldToType soldTo = new SoldToType(); //soldTo.Option = "1"; //soldTo.AttentionName = "Sold To Attn Name"; //soldTo.Name = "Sold To Name"; //PhoneType soldToPhone = new PhoneType(); //soldToPhone.Number = "1234567890"; //soldToPhone.Extension = "1234"; //soldTo.Phone = soldToPhone; //AddressType soldToAddress = new AddressType(); //String[] soldToAddressLine = { "34 Queen St" }; //soldToAddress.AddressLine = soldToAddressLine; //soldToAddress.City = "Frankfurt"; //soldToAddress.PostalCode = "60547"; //soldToAddress.CountryCode = "DE"; //soldTo.Address = soldToAddress; //contacts.SoldTo = soldTo; //internationalForms.Contacts = contacts; /** **** Product ***** */ //ProductType product1 = new ProductType(); //String[] description = { md.GoodsList[0].SKU }; //product1.Description = description; //product1.CommodityCode = md.GoodsList[0].SKU;// "111222AA"; //product1.OriginCountryCode = "CN"; //UnitType unit = new UnitType(); //unit.Number = "147"; //unit.Value = "478"; //UnitOfMeasurementType uomProduct = new UnitOfMeasurementType(); //uomProduct.Code = "BOX"; //uomProduct.Description = "BOX"; //unit.UnitOfMeasurement = uomProduct; //product1.Unit = unit; //ProductWeightType productWeight = new ProductWeightType(); //productWeight.Weight = "10"; //UnitOfMeasurementType uomForWeight = new UnitOfMeasurementType(); //uomForWeight.Code = "LBS"; //uomForWeight.Description = "LBS"; //productWeight.UnitOfMeasurement = uomForWeight; //product1.ProductWeight = productWeight; //ProductType[] productList = { product1 }; //internationalForms.Product = productList; ///** **** InvoiceNumber, InvoiceDate, PurchaseOrderNumber, TermsOfShipment, ReasonForExport, Comments and DeclarationStatement ***** */ //internationalForms.InvoiceNumber = "asdf123"; //internationalForms.InvoiceDate = "20151225"; //internationalForms.PurchaseOrderNumber = "999jjj777"; //internationalForms.TermsOfShipment = "CFR"; //internationalForms.ReasonForExport = "Sale"; //internationalForms.Comments = "Your Comments"; //internationalForms.DeclarationStatement = "2xKM0765"; ///** **** Discount, FreightCharges, InsuranceCharges, OtherCharges and CurrencyCode ***** */ //IFChargesType discount = new IFChargesType(); //discount.MonetaryValue = "0"; //internationalForms.Discount = discount; //IFChargesType freight = new IFChargesType(); //freight.MonetaryValue = "0"; //internationalForms.FreightCharges = freight; //IFChargesType insurance = new IFChargesType(); //insurance.MonetaryValue = "0"; //internationalForms.InsuranceCharges = insurance; //OtherChargesType otherCharges = new OtherChargesType(); //otherCharges.MonetaryValue = "0"; //otherCharges.Description = "Misc"; //internationalForms.OtherCharges = otherCharges; //internationalForms.CurrencyCode = "USD"; //shpServiceOptions.InternationalForms = internationalForms; shipment.ShipmentServiceOptions = shpServiceOptions; PackageType package = new PackageType(); PackageWeightType packageWeight = new PackageWeightType(); packageWeight.Weight = md.GoodsList[0].Weight.ToString();// "1"; ShipUnitOfMeasurementType uom = new ShipUnitOfMeasurementType(); uom.Code = "LBS"; packageWeight.UnitOfMeasurement = uom; package.PackageWeight = packageWeight; DimensionsType dm = new DimensionsType(); dm.Height = md.GoodsList[0].Height; dm.Length = md.GoodsList[0].Lenght; dm.Width = md.GoodsList[0].Width; ShipUnitOfMeasurementType uom2 = new ShipUnitOfMeasurementType(); uom2.Code = "IN"; uom2.Description = "inches"; dm.UnitOfMeasurement = uom2; package.Dimensions = dm; PackagingType packType = new PackagingType(); packType.Code = md.packType;// "02"; package.Packaging = packType; PackageType[] pkgArray = { package }; shipment.Package = pkgArray; LabelSpecificationType labelSpec = new LabelSpecificationType(); LabelStockSizeType labelStockSize = new LabelStockSizeType(); labelStockSize.Height = "6"; labelStockSize.Width = "4"; labelSpec.LabelStockSize = labelStockSize; LabelImageFormatType labelImageFormat = new LabelImageFormatType(); labelImageFormat.Code = "GIF"; labelSpec.LabelImageFormat = labelImageFormat; shipmentRequest.LabelSpecification = labelSpec; shipmentRequest.Shipment = shipment; TransactionReferenceType rft=new TransactionReferenceType(); rft.CustomerContext = md.GoodsList[0].SKU;// "2xKM0765"; request.TransactionReference = rft; // Console.WriteLine(shipmentRequest); ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; shpSvc.Url = "https://onlinetools.ups.com/webservices/Ship"; ShipmentResponse shipmentResponse = shpSvc.ProcessShipment(shipmentRequest); //if (shipmentResponse.ShipmentResults.Form != null && shipmentResponse.ShipmentResults.Form.Image != null && shipmentResponse.ShipmentResults.Form.Image.GraphicImage != null) //{ // string labelBuffer = shipmentResponse.ShipmentResults.Form.Image.GraphicImage; // string LabelPath = AppDomain.CurrentDomain.BaseDirectory + "ups/";// @"F:\褚明杰\fedex\ShipService_v2014_cs\cs\ShipWebServiceClient\Express\International\ShipWebServiceClient\bin\Release\pdf\"; // String LabelFileName = LabelPath + shipmentResponse.ShipmentResults.ShipmentIdentificationNumber + ".png"; // Base64StringToImage(labelBuffer); //} if (shipmentResponse.ShipmentResults != null && shipmentResponse.ShipmentResults.ShipmentIdentificationNumber != null) { error = ""; return shipmentResponse.ShipmentResults.ShipmentIdentificationNumber; } //Console.WriteLine("The transaction was a " + shipmentResponse.Response.ResponseStatus.Description); //Console.WriteLine("The 1Z number of the new shipment is " + shipmentResponse.ShipmentResults.ShipmentIdentificationNumber); //Console.ReadKey(); error = "shipmentResponse.Response.ResponseStatus.Description"; return ""; } catch (System.Web.Services.Protocols.SoapException ex) { //Console.WriteLine(""); //Console.WriteLine("---------Ship 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(""); error = ex.Message + "shipmentResponse.Response.ResponseStatus.Description" + "SoapException Category:Code:Message= " + ex.Detail.LastChild.InnerText + "SoapException XML String for all= " + ex.Detail.LastChild.OuterXml; return ""; } //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(" General Exception= " + ex.Message); //Console.WriteLine(" General Exception-StackTrace= " + ex.StackTrace); //Console.WriteLine("-------------------------"); error = ex.Message + ex.StackTrace; return ""; } finally { //Console.ReadKey(); } } public string GetTrackCodeNew(UPSOrder md,out string error) { try { //var URL = "https://wwwcie.ups.com/api/shipments/v1/ship";//测试地址 var URL = "https://onlinetools.ups.com/api/shipments/v1/ship";//正式地址 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); var shipping = new ShippingRequestModel() { ShipmentRequest = new ShipmentRequestNew { Request = new Request { RequestOption = "nonvalidate ", SubVersion = "2205", TransactionReference = new TransactionReference { CustomerContext = "CustomerContext" } }, Shipment = new ShippingShipment { Shipper = new Ship_Shipment_Shipper { Name = md.Shiper.PersonName, AttentionName = "", ShipperNumber = ShipperNumber, Phone = new Ship_Shipper_Phone { Number = md.Shiper.PhoneNumber, Extension = "", }, Address = new AddressFrom { AddressLine = new List() { md.Shiper.StreetLines }, City = md.Shiper.City, StateProvinceCode = md.Shiper.StateOrProvinceCode, PostalCode = md.Shiper.PostalCode, CountryCode = md.Shiper.CountryCode } }, ShipTo = new Ship_Shipment_ShipTo { Name = md.Rever.PersonName, AttentionName = md.Rever.PersonName, //Phone=new Ship_Shipper_Phone //{ // Number=md.Rever.PhoneNumber, // Extension="" //}, Address = new AddressTo { AddressLine = new List() { md.Rever.StreetLines }, City = md.Rever.City, StateProvinceCode = md.Rever.StateOrProvinceCode, PostalCode = md.Rever.PostalCode, CountryCode = md.Rever.CountryCode, } }, ShipFrom = new Ship_Shipment_ShipFrom { Name = md.Shiper.PersonName, Phone = new Ship_Shipper_Phone { Number = md.Shiper.PhoneNumber, Extension = "", }, Address = new AddressFrom { AddressLine = new List() { md.Shiper.StreetLines }, City = md.Shiper.City, StateProvinceCode = md.Shiper.StateOrProvinceCode, PostalCode = md.Shiper.PostalCode, CountryCode = md.Shiper.CountryCode } }, PaymentInformation = new PaymentInformation { ShipmentCharge = new List { new ShipmentCharge { Type="01", BillShipper=new BillShipper { AccountNumber=ShipperNumber } } }, }, Service = new Service { Code = md.shipservicecode, Description = "", }, Package = new List { new Ship_Shipment_Package { Packaging=new CodeAndDescription { Code=md.packType, Description="" }, Dimensions=new DimensionsNew { UnitOfMeasurement=new UnitOfMeasurement { Code="IN", Description="Inches" }, Length=md.GoodsList[0].Lenght, Width=md.GoodsList[0].Width, Height=md.GoodsList[0].Height, }, PackageWeight=new PackageWeight { UnitOfMeasurement=new UnitOfMeasurement { Code="LBS", Description="Pounds", }, Weight=md.GoodsList[0].Weight.ToString() } } }, }, LabelSpecification = new Ship_ShipmentRequest_LabelSpecification { LabelImageFormat = new CodeAndDescription { Code = "PNG" }, HTTPUserAgent = "", LabelStockSize = new LabelStockSize { Height = "6", Width = "4" } } } }; var bodyStr = JsonConvert.SerializeObject(shipping); //bodyStr = "{\"ShipmentRequest\":{\"Request\":{\"RequestOption\":\"validate\",\"SubVersion\":\"2205\",\"TransactionReference\":{\"CustomerContext\":\"CustomerContext\"}},\"Shipment\":{\"Description\":null,\"Shipper\":{\"Name\":\"Karmas Far Inc\",\"AttentionName\":\"\",\"CompanyDisplayableName\":null,\"TaxIdentificationNumber\":null,\"Phone\":{\"Number\":\"8045971260\",\"Extension\":\"\"},\"ShipperNumber\":\"44434A\",\"FaxNumber\":null,\"EMailAddress\":null,\"Address\":{\"AddressLine\":[\"11190 White Birch Dr Suite 100\"],\"City\":\"Jacksonville\",\"StateProvinceCode\":\"FL\",\"PostalCode\":\"32226\",\"CountryCode\":\"US\"}},\"ShipTo\":{\"Name\":\"sheila kowall\",\"AttentionName\":\"sheila kowall\",\"CompanyDisplayableName\":null,\"TaxIdentificationNumber\":null,\"Phone\":{\"Number\":\"210-728-4548\",\"Extension\":\"\"},\"FaxNumber\":null,\"EMailAddress\":null,\"Address\":{\"AddressLine\":[\"4184 hwy 11\"],\"City\":\"Enterprise\",\"StateProvinceCode\":\"MS\",\"PostalCode\":\"39330\",\"CountryCode\":\"US\",\"ResidentialAddressIndicator\":null},\"LocationID\":null},\"ShipFrom\":{\"Name\":\"Karmas Far Inc\",\"AttentionName\":null,\"CompanyDisplayableName\":null,\"TaxIdentificationNumber\":null,\"Phone\":{\"Number\":\"9045971260\",\"Extension\":\"\"},\"FaxNumber\":null,\"Address\":{\"AddressLine\":[\"11190 White Birch Dr Suite 100\"],\"City\":\"Jacksonville\",\"StateProvinceCode\":\"FL\",\"PostalCode\":\"32226\",\"CountryCode\":\"US\"}},\"PaymentInformation\":{\"ShipmentCharge\":[{\"Type\":\"01\",\"BillShipper\":{\"AccountNumber\":\"44434A\"},\"BillReceiver\":null,\"BillThirdParty\":null,\"ConsigneeBilledIndicator\":null}],\"SplitDutyVATIndicator\":null},\"Service\":{\"Code\":\"03\",\"Description\":\"\"},\"Package\":[{\"Description\":null,\"Packaging\":{\"Code\":\"02\",\"Description\":\"\"},\"Dimensions\":{\"UnitOfMeasurement\":{\"Code\":\"IN\",\"Description\":\"Inches\"},\"Length\":\"24\",\"Width\":\"11\",\"Height\":\"5\"},\"PackageWeight\":{\"UnitOfMeasurement\":{\"Code\":\"LBS\",\"Description\":\"Pounds\"},\"Weight\":\"6.625000\"}}],\"LabelSpecification\":null},\"LabelSpecification\":{\"LabelImageFormat\":{\"Code\":\"GIF\",\"Description\":null},\"HTTPUserAgent\":\"\",\"LabelStockSize\":{\"Height\":\"6\",\"Width\":\"4\"}}}}"; 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.ShipmentResponse!=null && resObj.ShipmentResponse.ShipmentResults != null) { error = ""; var imageBase64 = resObj.ShipmentResponse.ShipmentResults.PackageResults.ShippingLabel.GraphicImage;//面单图片的Base64字符串 var trackingNumber= resObj.ShipmentResponse.ShipmentResults.ShipmentIdentificationNumber;//跟踪码 string LabelPath = AppDomain.CurrentDomain.BaseDirectory + "attached/ups/"; Random rd = new Random(); String LabelFileName = LabelPath + DateTime.Now.ToString("yyyyMMddHHmmssfff") + rd.Next(100, 999).ToString() + ".png"; String LabelFileName2 = LabelPath + trackingNumber + ".png"; Base64StringToImage(imageBase64, LabelFileName); using (FileStream file = new FileStream(LabelFileName, FileMode.Open)) { Image img = Image.FromStream(file); UpsLabel obj3 = new UpsLabel(); var img2 = obj3.RotateImg(img, 90); img2.Save(LabelFileName2); } return resObj.ShipmentResponse.ShipmentResults.ShipmentIdentificationNumber; } error = "shipmentResponse.Response.ResponseStatus.Description:" + result; return ""; } catch(Exception ex) { error = ex.Message + ex.StackTrace; return ""; } } /// /// 把base64字符串转化为图片,传入base64字符串 /// /// /// public static void Base64StringToImage(string strbase64, string path) { try { strbase64 = strbase64.Replace(' ', '+'); System.IO.MemoryStream stream = new System.IO.MemoryStream(Convert.FromBase64String(strbase64)); System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); byte[] b = stream.ToArray(); //byte[] b = stream.GetBuffer(); fs.Write(b, 0, b.Length); fs.Close(); } catch (Exception ex) { } } } public class UPSOrder { public string CustomerTransactionId { get; set; } public List GoodsList { get; set; } public int? PostId { get; set; } public Rever Rever { get; set; } public Shiper Shiper { get; set; } public string shipservicecode { get; set; } public string packType { get; set; } } public class UpsGoods { public decimal Amount { get; set; } public string CountryOfManufacture { get; set; } public string Description { get; set; } public string Height { get; set; } public string Lenght { get; set; } public string NumberOfPieces { get; set; } public decimal Quantity { get; set; } public string SKU { get; set; } public decimal Weight { get; set; } public string Width { get; set; } } }