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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}