using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Xml.Linq; using NetLibrary.Log; namespace NetLibrary.Express { public class YanWenApi { public string url{get;set;} /// /// 接入码 /// public string UserCode { get; set; } /// /// 校验码 /// public string CheckCode { get; set; } public YanWenApi() { url = "http://Online.yw56.com.cn/service/"; } public string GetTrackCode(YW_Order model) { var weburl = string.Format("{0}/Users/{1}/Expresses", url, UserCode); WebClient client = new WebClient(); string token = GetYWToken(); client.Headers.Add(HttpRequestHeader.Authorization, "basic " + token); client.Headers.Add(HttpRequestHeader.ContentType, "text/xml; charset=utf-8"); string state = " "; if(model.d_State!="") { state = model.d_State; } string address1 = ""; string address2 = ""; if(model.d_address.Length>50) { address1 = model.d_address.Substring(0,50); address2 = model.d_address.Substring(50, model.d_address.Length-50); } else { address1=model.d_address; } var postBody = new string[] { "", string.Format("{0}",string.Format("Test{0}", new Random().Next())), string.Format("{0}",UserCode), " "+model.Channel+"", " "+model.orderid+"", string.Format("{0}T00:00:00",DateTime.Now.ToString("yyyy-MM-dd")), " ", string.Format("{0}",UserCode), " "+model.d_contact+"", " "+model.d_tel+"", " "+model.d_mobile+"", " "+model.d_email+"", " ", " "+model.d_country+"", " "+model.d_postcode+"", " "+state+"", " "+model.d_City+"", " "+address1+"", " "+address2+"", " ", " "+model.Memo+"", " "+model.GoodsNum.ToString()+"", " ", string.Format("{0}",UserCode), " "+model.cnname+"", " "+model.enname+"", " "+model.weight.ToString()+"", " "+model.delcarevalue.ToString()+"", " "+model.MoreGoodsName+"", " "+model.HsCode+"", " USD", " ", "" }; string str = string.Join("", postBody); var data = Encoding.UTF8.GetBytes(str); //var result = client.UploadData(weburl, "POST", data); string result = PostSend(str, "http://Online.yw56.com.cn/service/Users/" + UserCode + "/Expresses", token); //string PostResult = Encoding.UTF8.GetString(result); XElement xt = XElement.Parse(result); string temp = xt.Element("CallSuccess").Value.ToString(); string WaybillNumber = ""; if (temp == "true") WaybillNumber = xt.Element("CreatedExpress").Element("Epcode").Value; else { string failstr = xt.Element("Response").Element("ReasonMessage").Value.ToString(); if (failstr == "您的订单号不可重复") { string ttstr = PostSend(str.Replace(model.orderid, "C" + model.orderid), "http://Online.yw56.com.cn/service/Users/" + UserCode + "/Expresses", token);//gettrack(GetYWToken(), model.orderid); xt = XElement.Parse(ttstr); //WaybillNumber = xt.Element("ExpressCollection").Element("ExpressType").Element("Epcode").Value.ToString(); temp = xt.Element("CallSuccess").Value.ToString(); if (temp == "true") WaybillNumber = xt.Element("CreatedExpress").Element("Epcode").Value; else { return "失败(" + model.orderid + ")" + failstr; } } else { return "失败(" + model.orderid + ")" + failstr; } } return WaybillNumber; } public string PostSend(string output, string Url, string APIToken) { string strReturn = ""; byte[] obtPostData = Encoding.UTF8.GetBytes(output.ToString()); HttpWebRequest orqRequest = (HttpWebRequest)WebRequest.Create(Url); orqRequest.Timeout = 3000; orqRequest.Method = "POST"; orqRequest.ContentType = "text/xml; charset=utf-8"; orqRequest.ContentLength = obtPostData.Length; orqRequest.Headers.Add(HttpRequestHeader.Authorization, "basic " + APIToken); Stream stream; using (stream = orqRequest.GetRequestStream()) { stream.Write(obtPostData, 0, obtPostData.Length); } HttpWebResponse orsResponse = (HttpWebResponse)orqRequest.GetResponse(); using (Stream responseStream = orsResponse.GetResponseStream()) { using (StreamReader streamRead = new StreamReader(responseStream, Encoding.UTF8)) { strReturn = streamRead.ReadToEnd(); } } return strReturn; } public string gettrack(string token, string orderno) { string URL = ("http://Online.yw56.com.cn/service/Users/" + UserCode + "/Expresses?page=&code=" + orderno + "&channel=&start=" + DateTime.Today.AddMonths(-3).ToShortDateString() + "&end=" + DateTime.Today.ToShortDateString() + "&isstatus=1"); //WishAPI wa = new WishAPI(); string strReturn = ""; HttpWebRequest orqRequest = (HttpWebRequest)WebRequest.Create(URL); orqRequest.Timeout = 3000; orqRequest.Method = "Get"; orqRequest.ContentType = "text/xml; charset=utf-8"; orqRequest.Headers.Add(HttpRequestHeader.Authorization, "basic " + token); HttpWebResponse orsResponse = (HttpWebResponse)orqRequest.GetResponse(); using (Stream responseStream = orsResponse.GetResponseStream()) { using (StreamReader streamRead = new StreamReader(responseStream, Encoding.UTF8)) { strReturn = streamRead.ReadToEnd(); } } return strReturn; } public string getchannel() { string token = GetYWToken(); string URL = ("http://Online.yw56.com.cn/service/Users/" + UserCode + "/GetChannels"); //WishAPI wa = new WishAPI(); string strReturn = ""; HttpWebRequest orqRequest = (HttpWebRequest)WebRequest.Create(URL); orqRequest.Timeout = 3000; orqRequest.Method = "Get"; orqRequest.ContentType = "text/xml; charset=utf-8"; orqRequest.Headers.Add(HttpRequestHeader.Authorization, "basic " + token); HttpWebResponse orsResponse = (HttpWebResponse)orqRequest.GetResponse(); using (Stream responseStream = orsResponse.GetResponseStream()) { using (StreamReader streamRead = new StreamReader(responseStream, Encoding.UTF8)) { strReturn = streamRead.ReadToEnd(); } } return strReturn; } public string GetYWToken() { try { //var weburl = string.Format("{0}/Common/LoginUser/{1}/{2}", url, UserCode, CheckCode); //var client = new WebClient(); //var response = client.DownloadString(weburl); //string ApiToken = XDocument.Parse(response) // .Element("LoginUserResponseType") // .Element("User") // .Element("ApiToken").Value; string str = ""; string url = "http://Online.yw56.com.cn/service/Common/LoginUser/" + UserCode + "/" + CheckCode; string result = GetSend(url); XElement xt = XElement.Parse(result); str = xt.Element("User").Element("ApiToken").Value.ToString(); return str; } catch (Exception ex) { return ""; } } #region 标签 public string GetLabel(string UserCode, string TrackCode, out string ErrorMessage) { try { byte[] obtPostData = Encoding.UTF8.GetBytes(TrackCode); string url2 = "http://Online.yw56.com.cn/service/Users/" + UserCode + "/Expresses/" + TrackCode + "/A10x10LCILabel"; ErrorMessage = ""; string strReturn = ""; string token = GetYWToken(); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url2); myRequest.Timeout = 3000; myRequest.Method = "Get"; myRequest.ContentType = "text/xml; charset=utf-8"; myRequest.Headers.Add(HttpRequestHeader.Authorization, "basic " + token); HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); Stream myResponseStream = myResponse.GetResponseStream(); StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies"; if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir); string fname = Guid.NewGuid().ToString() + ".pdf"; string filePath = dir + "/" + fname; using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { int size = 2048; byte[] data = new byte[2048]; while (true) { size = myResponseStream.Read(data, 0, data.Length); if (size > 0) { fileStream.Write(data, 0, size); } else { break; } } } reader.Close(); myResponseStream.Close(); myRequest.Abort(); myResponse.Close(); return fname; //HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //Stream myResponseStream = myResponse.GetResponseStream(); //StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); //string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies"; //if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir); //string fname = Guid.NewGuid().ToString() + ".pdf"; //string filePath = dir + "/" + fname; //using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) //{ // int size = 2048; // byte[] data = new byte[2048]; // while (true) // { // size = myResponseStream.Read(data, 0, data.Length); // if (size > 0) // { // fileStream.Write(data, 0, size); // } // else // { // break; // } // } //} //reader.Close(); //myResponseStream.Close(); //myRequest.Abort(); //myResponse.Close(); return ""; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; } return ""; } #endregion #region 标签 public string GetLabels(string UserCode, string TrackCode, out string ErrorMessage) { try { byte[] obtPostData = Encoding.UTF8.GetBytes(TrackCode); string url2 = "http://Online.yw56.com.cn/service/Users/" + UserCode + "/Expresses/A10x10LCILabel"; ErrorMessage = ""; string strReturn = ""; string token = GetYWToken(); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url2); myRequest.Timeout = 3000; myRequest.ContentLength = obtPostData.Length; myRequest.Method = "Post"; myRequest.ContentType = "text/xml; charset=utf-8"; myRequest.Headers.Add(HttpRequestHeader.Authorization, "basic " + token); Stream stream; using (stream = myRequest.GetRequestStream()) { stream.Write(obtPostData, 0, obtPostData.Length); } HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); Stream myResponseStream = myResponse.GetResponseStream(); StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies"; if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir); string fname = Guid.NewGuid().ToString() + ".pdf"; string filePath = dir + "/" + fname; using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { int size = 2048; byte[] data = new byte[2048]; while (true) { size = myResponseStream.Read(data, 0, data.Length); if (size > 0) { fileStream.Write(data, 0, size); } else { break; } } } reader.Close(); myResponseStream.Close(); myRequest.Abort(); myResponse.Close(); return fname; //HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //Stream myResponseStream = myResponse.GetResponseStream(); //StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); //string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies"; //if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir); //string fname = Guid.NewGuid().ToString() + ".pdf"; //string filePath = dir + "/" + fname; //using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) //{ // int size = 2048; // byte[] data = new byte[2048]; // while (true) // { // size = myResponseStream.Read(data, 0, data.Length); // if (size > 0) // { // fileStream.Write(data, 0, size); // } // else // { // break; // } // } //} //reader.Close(); //myResponseStream.Close(); //myRequest.Abort(); //myResponse.Close(); return ""; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; } return ""; } #endregion #region 标签 public string GetLabels2(string UserCode, string TrackCode,int isBG, out string ErrorMessage) { try { byte[] obtPostData = Encoding.UTF8.GetBytes(TrackCode); string labelname="A10x10LILabel"; if(isBG==1) labelname = "A10x10LCILabel"; string url2 = "http://Online.yw56.com.cn/service/Users/" + UserCode + "/Expresses/" + labelname; ErrorMessage = ""; string strReturn = ""; string token = GetYWToken(); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url2); myRequest.Timeout = 3000; myRequest.ContentLength = obtPostData.Length; myRequest.Method = "Post"; myRequest.ContentType = "text/xml; charset=utf-8"; myRequest.Headers.Add(HttpRequestHeader.Authorization, "basic " + token); Stream stream; using (stream = myRequest.GetRequestStream()) { stream.Write(obtPostData, 0, obtPostData.Length); } HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); Stream myResponseStream = myResponse.GetResponseStream(); StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies"; if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir); string fname = Guid.NewGuid().ToString() + ".pdf"; string filePath = dir + "/" + fname; using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { int size = 2048; byte[] data = new byte[2048]; while (true) { size = myResponseStream.Read(data, 0, data.Length); if (size > 0) { fileStream.Write(data, 0, size); } else { break; } } } reader.Close(); myResponseStream.Close(); myRequest.Abort(); myResponse.Close(); return fname; //HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //Stream myResponseStream = myResponse.GetResponseStream(); //StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8); //string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies"; //if (System.IO.Directory.Exists(dir) == false) System.IO.Directory.CreateDirectory(dir); //string fname = Guid.NewGuid().ToString() + ".pdf"; //string filePath = dir + "/" + fname; //using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) //{ // int size = 2048; // byte[] data = new byte[2048]; // while (true) // { // size = myResponseStream.Read(data, 0, data.Length); // if (size > 0) // { // fileStream.Write(data, 0, size); // } // else // { // break; // } // } //} //reader.Close(); //myResponseStream.Close(); //myRequest.Abort(); //myResponse.Close(); return ""; } catch (Exception ex) { ErrorFollow.TraceWrite(ex.TargetSite.Name, ex.StackTrace, ex.Message); ErrorMessage = ex.Message; } return ""; } #endregion public string GetSend(string URL) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "GET"; request.ContentType = "text/html"; request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)"; request.Headers.Add("Accept-Language: zh-CN"); request.Headers["Pragma"] = "no-cache"; //禁用缓存 request.Headers["Cache-Control"] = "no-cache"; //禁用缓存 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string josn = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); response.Close(); return josn; } } #region 订单 public class YW_Order { /// /// 客户订单号 /// public string orderid { get; set; } public string Channel { get; set; } /// /// 寄件方公司名称 /// public string j_company { get; set; } /// /// 寄件方联系人 /// public string j_contact { get; set; } /// /// 寄件方电话 /// public string j_tel { get; set; } /// /// 寄件方手机 /// public string j_mobile { get; set; } /// /// 寄件方详细地址 /// public string j_address { get; set; } /// /// 到件方公司名称,没有的话就传联系人名称 /// public string d_company { get; set; } /// /// 到件方联系人 /// public string d_contact { get; set; } /// /// 到件方联系电话 /// public string d_tel { get; set; } /// /// 到件方手机 /// public string d_mobile { get; set; } /// /// 到件方详细地址 /// public string d_address { get; set; } public string d_country { get; set; } public string d_email { get; set; } public string d_postcode { get; set; } public string d_State { get; set; } public string d_City { get; set; } public int GoodsNum { get; set; } public string Memo { get; set; } public string cnname { get; set; } /// /// 英文名 /// public string enname { get; set; } public decimal weight { get; set; } /// /// 报关价格(两位小数) /// public decimal delcarevalue { get; set; } public string MoreGoodsName { get; set; } public string HsCode { get; set; } //public List Goods { get; set; } } #endregion #region 物品信息 public class YW_Goods { /// /// 中文名 /// public string cnname { get; set; } /// /// 英文名 /// public string enname { get; set; } public decimal weight { get; set; } /// /// 报关价格(两位小数) /// public decimal delcarevalue { get; set; } } #endregion }