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
}