You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

648 lines
26 KiB
C#

2 months ago
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;}
/// <summary>
/// 接入码
/// </summary>
public string UserCode { get; set; }
/// <summary>
/// 校验码
/// </summary>
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[]
{
"<ExpressType>",
string.Format("<Epcode>{0}</Epcode>",string.Format("Test{0}", new Random().Next())),
string.Format("<Userid>{0}</Userid>",UserCode),
" <Channel>"+model.Channel+"</Channel>",
" <UserOrderNumber>"+model.orderid+"</UserOrderNumber>",
string.Format("<SendDate>{0}T00:00:00</SendDate>",DateTime.Now.ToString("yyyy-MM-dd")),
" <Receiver>",
string.Format("<Userid>{0}</Userid>",UserCode),
" <Name>"+model.d_contact+"</Name>",
" <Phone>"+model.d_tel+"</Phone>",
" <Mobile>"+model.d_mobile+"</Mobile>",
" <Email>"+model.d_email+"</Email>",
" <Company></Company>",
" <Country>"+model.d_country+"</Country>",
" <Postcode>"+model.d_postcode+"</Postcode>",
" <State>"+state+"</State>",
" <City>"+model.d_City+"</City>",
" <Address1>"+address1+"</Address1>",
" <Address2>"+address2+"</Address2>",
" </Receiver>",
" <Memo>"+model.Memo+"</Memo>",
" <Quantity>"+model.GoodsNum.ToString()+"</Quantity>",
" <GoodsName>",
string.Format("<Userid>{0}</Userid>",UserCode),
" <NameCh>"+model.cnname+"</NameCh>",
" <NameEn>"+model.enname+"</NameEn>",
" <Weight>"+model.weight.ToString()+"</Weight>",
" <DeclaredValue>"+model.delcarevalue.ToString()+"</DeclaredValue>",
" <MoreGoodsName>"+model.MoreGoodsName+"</MoreGoodsName>",
" <HsCode>"+model.HsCode+"</HsCode>",
" <DeclaredCurrency>USD</DeclaredCurrency>",
" </GoodsName>",
"</ExpressType>"
};
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
{
/// <summary>
/// 客户订单号
/// </summary>
public string orderid { get; set; }
public string Channel { get; set; }
/// <summary>
/// 寄件方公司名称
/// </summary>
public string j_company { get; set; }
/// <summary>
/// 寄件方联系人
/// </summary>
public string j_contact { get; set; }
/// <summary>
/// 寄件方电话
/// </summary>
public string j_tel { get; set; }
/// <summary>
/// 寄件方手机
/// </summary>
public string j_mobile { get; set; }
/// <summary>
/// 寄件方详细地址
/// </summary>
public string j_address { get; set; }
/// <summary>
/// 到件方公司名称,没有的话就传联系人名称
/// </summary>
public string d_company { get; set; }
/// <summary>
/// 到件方联系人
/// </summary>
public string d_contact { get; set; }
/// <summary>
/// 到件方联系电话
/// </summary>
public string d_tel { get; set; }
/// <summary>
/// 到件方手机
/// </summary>
public string d_mobile { get; set; }
/// <summary>
/// 到件方详细地址
/// </summary>
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; }
/// <summary>
/// 英文名
/// </summary>
public string enname { get; set; }
public decimal weight { get; set; }
/// <summary>
/// 报关价格(两位小数)
/// </summary>
public decimal delcarevalue { get; set; }
public string MoreGoodsName { get; set; }
public string HsCode { get; set; }
//public List<YW_Goods> Goods { get; set; }
}
#endregion
#region 物品信息
public class YW_Goods
{
/// <summary>
/// 中文名
/// </summary>
public string cnname { get; set; }
/// <summary>
/// 英文名
/// </summary>
public string enname { get; set; }
public decimal weight { get; set; }
/// <summary>
/// 报关价格(两位小数)
/// </summary>
public decimal delcarevalue { get; set; }
}
#endregion
}