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.

1205 lines
45 KiB
C#

2 months ago
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization;
using System.Xml.Linq;
using NetLibrary.Log;
using System.Security.Cryptography;
namespace NetLibrary.Express
{
public class EubApi
{
#region 发货
public string SendGoods(Eub_Order model, string authenticate, out string ErrorMessage)
{
if (string.IsNullOrEmpty(authenticate) == true)
{
ErrorMessage = "校验码不能为空";
return "";
}
List<string> ListHeader = new List<string>();
ListHeader.Add("authenticate:" + authenticate);
ListHeader.Add("version:international_eub_us_1.1");
string postmessage = model.ToXml();
//string sss = postmessage.Substring(1087, 50);
//ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = Encoding.UTF8.GetBytes(postmessage);
string XmlContent = "";// CustomIO.HttpRequest2("http://www.ems.com.cn/partner/api/public/p/order", "POST", "", ListHeader, HttpVersion.Version10, data, out ErrorMessage);
HttpWebResponse response;
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create("http://shipping.ems.com.cn/partner/api/public/p/order");
//http://shipping2.ems.com.cn/partner/api/public/p/order
ASCIIEncoding encoding = new ASCIIEncoding();
//string postData = string.Format(postmessage, "");
request.Method = "POST";
request.Headers.Add("authenticate:" + authenticate);
request.Headers.Add("version:international_eub_us_1.1");
request.ProtocolVersion = HttpVersion.Version10;
request.Timeout = 10000;
Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
string html = string.Empty;
//获取服务器返回的资源
response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
request.Timeout = 10000;
html = reader.ReadToEnd();
ErrorMessage = "";
if (html.Contains("error"))
{
ErrorMessage = html;
return "";
}
//if (string.IsNullOrEmpty(ErrorMessage) == false) return "";
XmlContent = html;
//XmlContent = XmlContent.ToLower().Replace("![cdata", "![CDATA");
XElement doc = null;
try
{
doc = XElement.Parse(XmlContent);
}
catch (Exception ex)
{
ErrorMessage = XmlContent;
return "";
}
string status = CustomIO.GetXmlElement(doc, "status");
if (status == "error") ErrorMessage = CustomIO.GetXmlElement(doc, "description");
string ExpressNo = CustomIO.GetXmlElement(doc, "mailnum");
return ExpressNo;
}
#endregion
#region 追踪
public List<Eub_Trace> GetTraces(string ExpressNo, string Language, string authenticate, out string ErrorMessage)
{
string mess = "";
ErrorMessage = "";
try
{
if (string.IsNullOrEmpty(authenticate) == true)
{
ErrorMessage = "校验码不能为空";
return null;
}
List<string> ListHeader = new List<string>();
ListHeader.Add("authenticate:" + authenticate);
ListHeader.Add("version:international_eub_us_1.1");
string XmlContent = CustomIO.HttpRequest2("http://www.ems.com.cn/partner/api/public/p/track/query/" + Language + "/" + ExpressNo, "GET", "", ListHeader, HttpVersion.Version10, null, out ErrorMessage);
if (XmlContent == null)
{
ErrorMessage = "查询不到";
return null;
}
XmlContent = XmlContent.ToLower();
mess = XmlContent;
if (XmlContent != "")
{
int nelen = 0;
while (XmlContent.IndexOf("<trace>", nelen) >= 0)
{
int slen = XmlContent.IndexOf("<trace>", nelen);
nelen = slen + 7;
int elen = XmlContent.IndexOf("</trace>", nelen);
if (elen < 0)
elen = XmlContent.IndexOf("<trace>", nelen);
nelen = elen + 7;
XmlContent = XmlContent.Substring(0, elen) + "</trace>" + XmlContent.Substring(nelen);
}
nelen = 0;
while (XmlContent.IndexOf("<remark>", nelen) >= 0)
{
int slen = XmlContent.IndexOf("<remark>", nelen);
nelen = slen + 8;
int elen = XmlContent.IndexOf("</remark>", nelen);
if (elen < 0)
elen = XmlContent.IndexOf("<remark>", nelen);
nelen = elen + 8;
XmlContent = XmlContent.Substring(0, elen) + "</remark>" + XmlContent.Substring(nelen);
}
}
// return null;
XElement doc = XElement.Parse(XmlContent);
List<Eub_Trace> ListModel = new List<Eub_Trace>();
foreach (var item in doc.Elements("trace"))
{
Eub_Trace model = new Eub_Trace();
string accepttime = CustomIO.GetXmlElement(item, "accepttime");
if (accepttime != "")
{
model.accepttime = Convert.ToDateTime(CustomIO.GetXmlElement(item, "accepttime"));
}
model.acceptaddress = CustomIO.GetXmlElement(item, "acceptaddress");
model.remark = CustomIO.GetXmlElement(item, "remark");
ListModel.Add(model);
}
return ListModel;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
ErrorFollow.TraceWrite("GetTraces", ExpressNo, mess + " " + ex.Message);
}
return null;
}
#endregion
#region 追踪
public string GetTraces2(string ExpressNo, string Language, string authenticate)
{
string ApiKey = "44d205c5e27d4383";//请把XXXXXX修改成您在快递100网站申请的APIKey
// string expno ="";
string typeCom = "youzhengguoji";
string nu = ExpressNo;
string powered = "快递数据由: <a href=\"http://www.kuaidi100.com/?refer=hishop\" target=\"_blank\">快递100</a> 提供";
//if (typeCom == "AAE全球专递")
//{
// typeCom = "aae";
//}
//if (typeCom == "安捷快递")
//{
// typeCom = "anjiekuaidi";
//}
//if (typeCom == "安信达快递")
//{
// typeCom = "anxindakuaixi";
//}
//if (typeCom == "百福东方")
//{
// typeCom = "baifudongfang";
//}
//if (typeCom == "彪记快递")
//{
// typeCom = "biaojikuaidi";
//}
//if (typeCom == "BHT")
//{
// typeCom = "bht";
//}
//if (typeCom == "BHT")
//{
// typeCom = "bht";
//}
//if (typeCom == "希伊艾斯快递")
//{
// typeCom = "cces";
//}
//if (typeCom == "中国东方")
//{
// typeCom = "Coe";
//}
//if (typeCom == "长宇物流")
//{
// typeCom = "changyuwuliu";
//}
//if (typeCom == "大田物流")
//{
// typeCom = "datianwuliu";
//}
//if (typeCom == "德邦物流")
//{
// typeCom = "debangwuliu";
//}
//if (typeCom == "DPEX")
//{
// typeCom = "dpex";
//}
//if (typeCom == "DHL")
//{
// typeCom = "dhl";
//}
//if (typeCom == "D速快递")
//{
// typeCom = "dsukuaidi";
//}
//if (typeCom == "fedex")
//{
// typeCom = "fedex";
//}
//if (typeCom == "飞康达物流")
//{
// typeCom = "feikangda";
//}
//if (typeCom == "凤凰快递")
//{
// typeCom = "fenghuangkuaidi";
//}
//if (typeCom == "港中能达物流")
//{
// typeCom = "ganzhongnengda";
//}
//if (typeCom == "广东邮政物流")
//{
// typeCom = "guangdongyouzhengwuliu";
//}
//if (typeCom == "汇通快运")
//{
// typeCom = "huitongkuaidi";
//}
//if (typeCom == "恒路物流")
//{
// typeCom = "hengluwuliu";
//}
//if (typeCom == "华夏龙物流")
//{
// typeCom = "huaxialongwuliu";
//}
//if (typeCom == "佳怡物流")
//{
// typeCom = "jiayiwuliu";
//}
//if (typeCom == "京广速递")
//{
// typeCom = "jinguangsudikuaijian";
//}
//if (typeCom == "急先达")
//{
// typeCom = "jixianda";
//}
//if (typeCom == "佳吉物流")
//{
// typeCom = "jiajiwuliu";
//}
//if (typeCom == "加运美")
//{
// typeCom = "jiayunmeiwuliu";
//}
//if (typeCom == "快捷速递")
//{
// typeCom = "kuaijiesudi";
//}
//if (typeCom == "联昊通物流")
//{
// typeCom = "lianhaowuliu";
//}
//if (typeCom == "龙邦物流")
//{
// typeCom = "longbanwuliu";
//}
//if (typeCom == "民航快递")
//{
// typeCom = "minghangkuaidi";
//}
//if (typeCom == "配思货运")
//{
// typeCom = "peisihuoyunkuaidi";
//}
//if (typeCom == "全晨快递")
//{
// typeCom = "quanchenkuaidi";
//}
//if (typeCom == "全际通物流")
//{
// typeCom = "quanjitong";
//}
//if (typeCom == "全日通快递")
//{
// typeCom = "quanritongkuaidi";
//}
//if (typeCom == "全一快递")
//{
// typeCom = "quanyikuaidi";
//}
//if (typeCom == "盛辉物流")
//{
// typeCom = "shenghuiwuliu";
//}
//if (typeCom == "速尔物流")
//{
// typeCom = "suer";
//}
//if (typeCom == "盛丰物流")
//{
// typeCom = "shengfengwuliu";
//}
//if (typeCom == "天地华宇")
//{
// typeCom = "tiandihuayu";
//}
//if (typeCom == "天天快递")
//{
// typeCom = "tiantian";
//}
//if (typeCom == "TNT")
//{
// typeCom = "tnt";
//}
//if (typeCom == "UPS")
//{
// typeCom = "ups";
//}
//if (typeCom == "万家物流")
//{
// typeCom = "wanjiawuliu";
//}
//if (typeCom == "文捷航空速递")
//{
// typeCom = "wenjiesudi";
//}
//if (typeCom == "伍圆速递")
//{
// typeCom = "wuyuansudi";
//}
//if (typeCom == "万象物流")
//{
// typeCom = "wanxiangwuliu";
//}
//if (typeCom == "新邦物流")
//{
// typeCom = "xinbangwuliu";
//}
//if (typeCom == "信丰物流")
//{
// typeCom = "xinfengwuliu";
//}
//if (typeCom == "星晨急便")
//{
// typeCom = "xingchengjibian";
//}
//if (typeCom == "鑫飞鸿物流")
//{
// typeCom = "xinhongyukuaidi";
//}
//if (typeCom == "亚风速递")
//{
// typeCom = "yafengsudi";
//}
//if (typeCom == "一邦速递")
//{
// typeCom = "yibangwuliu";
//}
//if (typeCom == "优速物流")
//{
// typeCom = "youshuwuliu";
//}
//if (typeCom == "远成物流")
//{
// typeCom = "yuanchengwuliu";
//}
//if (typeCom == "圆通速递")
//{
// typeCom = "yuantong";
//}
//if (typeCom == "源伟丰快递")
//{
// typeCom = "yuanweifeng";
//}
//if (typeCom == "元智捷诚快递")
//{
// typeCom = "yuanzhijiecheng";
//}
//if (typeCom == "越丰物流")
//{
// typeCom = "yuefengwuliu";
//}
//if (typeCom == "韵达快递")
//{
// typeCom = "yunda";
//}
//if (typeCom == "源安达")
//{
// typeCom = "yuananda";
//}
//if (typeCom == "运通快递")
//{
// typeCom = "yuntongkuaidi";
//}
//if (typeCom == "宅急送")
//{
// typeCom = "zhaijisong";
//}
//if (typeCom == "中铁快运")
//{
// typeCom = "zhongtiewuliu";
//}
//if (typeCom == "中通速递")
//{
// typeCom = "zhongtong";
//}
//if (typeCom == "中邮物流")
//{
// typeCom = "zhongyouwuliu";
//}
string apiurl = "http://api.kuaidi100.com/api?id=" + ApiKey + "&com=" + typeCom + "&nu=" + nu + "&show=2&muti=1&order=asc";
//Response.Write (apiurl);
WebRequest request = WebRequest.Create(@apiurl);
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
Encoding encode = Encoding.UTF8;
StreamReader reader = new StreamReader(stream, encode);
string detail = reader.ReadToEnd();
//Response.Write(detail + "<br/>" + powered);
Regex reg = new Regex("<td.*?>(?<val>.*?)</td>");
var ms = reg.Matches(detail);
string aa = "";
for (int i = 0; i < ms.Count; i++)
{
aa += ms[i].Groups["val"].Value;
}
return detail;
}
public string PostSend2(string output, string Url)
{
try
{
string strReturn = "";
byte[] obtPostData = Encoding.UTF8.GetBytes(output.ToString());
HttpWebRequest orqRequest = (HttpWebRequest)WebRequest.Create(Url);
orqRequest.Timeout = 5000;
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;
}
catch (Exception ex)
{
// ErrorFollow.TraceWrite("PostSend", output, ex.Message);
return "运行错误" + ex.Message;
}
return "";
}
public TrackInfo PostSend3(string output, string Url, string Url1)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.CookieContainer = new CookieContainer();
CookieContainer cookie = request.CookieContainer;//如果用不到Cookie删去即可
//以下是发送的http头随便加其中referer挺重要的有些网站会根据这个来反盗链
request.Referer = Url1;
request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
request.KeepAlive = false;
//上面的http头看情况而定但是下面俩必须加
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
byte[] postData = encoding.GetBytes(output);//postDataStr即为发送的数据格式还是和上次说的一样
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
//如果http头中接受gzip的话这里就要判断是否为有压缩有的话直接解压缩即可
if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
{
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
}
StreamReader streamReader = new StreamReader(responseStream, encoding);
string retString = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
TrackInfo Model = null;
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
if (retString != null && retString != "")
{
Model = JsonConvert.Deserialize<TrackInfo>(retString);
}
return Model;
}
catch (Exception ex)
{
TrackInfo Model = new TrackInfo();
Model.msg = "运行错误" + ex.Message;
return Model;
// ErrorFollow.TraceWrite("PostSend", output, ex.Message);
}
return null;
}
public void PostSend31(string output, string Url, string Url1)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Timeout = 3000;
request.CookieContainer = new CookieContainer();
CookieContainer cookie = request.CookieContainer;//如果用不到Cookie删去即可
//以下是发送的http头随便加其中referer挺重要的有些网站会根据这个来反盗链
request.Referer = Url1;
request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
request.KeepAlive = false;
//上面的http头看情况而定但是下面俩必须加
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
byte[] postData = encoding.GetBytes(output);//postDataStr即为发送的数据格式还是和上次说的一样
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
////如果http头中接受gzip的话这里就要判断是否为有压缩有的话直接解压缩即可
//if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
//{
// responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
//}
//StreamReader streamReader = new StreamReader(responseStream, encoding);
////string retString = streamReader.ReadToEnd();
responseStream.Close();
response.Close();
}
catch (Exception ex)
{
}
}
public TrackInfo PostSend(string output, string Url)
{
try
{
string strReturn = "";
byte[] obtPostData = Encoding.UTF8.GetBytes(output.ToString());
HttpWebRequest orqRequest = (HttpWebRequest)WebRequest.Create(Url);
orqRequest.Timeout = 10000;
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();
}
}
orsResponse.Close();
TrackInfo Model = null;
JavaScriptSerializer JsonConvert = new JavaScriptSerializer();
if (strReturn != null && strReturn != "")
{
Model = JsonConvert.Deserialize<TrackInfo>(strReturn);
}
return Model;
}
catch (Exception ex)
{
TrackInfo Model = new TrackInfo();
Model.msg = "运行错误" + ex.Message;
return Model;
// ErrorFollow.TraceWrite("PostSend", output, ex.Message);
}
return null;
}
#endregion
/// <summary>
/// 获得字符串中开始和结束字符串中间得值
/// </summary>
/// <param name="str">字符串</param>
/// <param name="s">开始</param>
/// <param name="e">结束</param>
/// <returns></returns>
public static string GetValue(string str, string s, string e)
{
Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);
return rg.Match(str).Value;
}
#region 运费估算
public Eub_Fee GetFee(Eub_Fee model, string authenticate, out string ErrorMessage)
{
if (string.IsNullOrEmpty(authenticate) == true)
{
ErrorMessage = "校验码不能为空";
return null;
}
List<string> ListHeader = new List<string>();
ListHeader.Add("authenticate:" + authenticate);
ListHeader.Add("version:international_eub_us_1.1");
string postmessage = model.ToXml();
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postmessage);
string XmlContent = CustomIO.HttpRequest2("http://www.ems.com.cn/partner/api/public/p/rate/epacket", "POST", "", ListHeader, HttpVersion.Version10, data, out ErrorMessage);
XmlContent = XmlContent.ToLower();
XElement doc = XElement.Parse(XmlContent);
string fee = CustomIO.GetXmlElement(doc, "fee");
model.fee = Convert.ToDecimal(fee);
model.remark = CustomIO.GetXmlElement(doc, "remark");
return model;
}
#endregion
#region 发货测试
public string SendGoods2(string xml, string authenticate, out string ErrorMessage)
{
if (string.IsNullOrEmpty(authenticate) == true)
{
ErrorMessage = "校验码不能为空";
return "";
}
List<string> ListHeader = new List<string>();
ListHeader.Add("authenticate:" + authenticate);
ListHeader.Add("version:international_eub_us_1.1");
string postmessage = xml;
//string sss = postmessage.Substring(1087, 50);
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postmessage);
string XmlContent = CustomIO.HttpRequest2("http://www.ems.com.cn/partner/api/public/p/order", "POST", "", ListHeader, HttpVersion.Version10, data, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "";
XmlContent = XmlContent.ToLower();
//XmlContent = XmlContent.ToLower().Replace("![cdata", "![CDATA");
XElement doc = null;
try
{
doc = XElement.Parse(XmlContent);
}
catch (Exception ex)
{
ErrorMessage = XmlContent;
return "";
}
string status = CustomIO.GetXmlElement(doc, "status");
if (status == "error") ErrorMessage = CustomIO.GetXmlElement(doc, "description");
string ExpressNo = CustomIO.GetXmlElement(doc, "mailnum");
return ExpressNo;
}
#endregion
#region 面单
public string GetLabel(string xml, string authenticate, out string ErrorMessage)
{
if (string.IsNullOrEmpty(authenticate) == true)
{
ErrorMessage = "校验码不能为空";
return "";
}
List<string> ListHeader = new List<string>();
ListHeader.Add("authenticate:" + authenticate);
ListHeader.Add("version:international_eub_us_1.1");
string postmessage = xml;
//string sss = postmessage.Substring(1087, 50);
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postmessage);
string XmlContent = CustomIO.HttpRequest2("http://shipping.ems.com.cn/partner/api/public/p/print/downloadLabels", "POST", "", ListHeader, HttpVersion.Version10, data, out ErrorMessage);
if (string.IsNullOrEmpty(ErrorMessage) == false) return "";
XmlContent = XmlContent.ToLower();
//XmlContent = XmlContent.ToLower().Replace("![cdata", "![CDATA");
XElement doc = null;
try
{
doc = XElement.Parse(XmlContent);
}
catch (Exception ex)
{
ErrorMessage = XmlContent;
return "";
}
string status = CustomIO.GetXmlElement(doc, "status");
if (status == "error") ErrorMessage = CustomIO.GetXmlElement(doc, "description");
string url = CustomIO.GetXmlElement(doc, "url");
return url;
}
#endregion
#region 面单
public string GetLabelPdf(string postcode, string authenticate)
{
if (string.IsNullOrEmpty(authenticate) == true)
{
return "";
}
//List<string> ListHeader = new List<string>();
//ListHeader.Add("authenticate:" + authenticate);
//ListHeader.Add("version:international_eub_us_1.1");
string md5auth = MD5Encrypt(authenticate + postcode);
string url = "http://labels.ems.com.cn/partner/api/public/p/static/label/download/" + md5auth + "/" + postcode + ".pdf";
return url;
}
#endregion
///   <summary>
///   给一个字符串进行MD5加密
///   </summary>
///   <param   name="strText">待加密字符串</param>
///   <returns>加密后的字符串</returns>
public static string MD5Encrypt(string str)
{
string cl = str;
MD5 md5 = MD5.Create();//实例化一个md5对像
// 加密后是一个字节类型的数组这里要注意编码UTF8/Unicode等的选择 
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
int i, j;
string pwd = "";
foreach (byte b in s)
{
i = Convert.ToInt32(b);
j = i >> 4;
pwd += Convert.ToString(j, 16);
j = i & 15;
pwd += Convert.ToString(j, 16);
}
return pwd;
}
}
#region 订单
public class Eub_Order
{
/// <summary>
/// 订单标识(可以重复分包的情况下)
/// </summary>
public string Orderid { get; set; }
public string OrderCode { get; set; }
/// <summary>
/// 业务类型(0:e 邮宝1:e 包裹2:e 特快)
/// </summary>
public int operationtype { get; set; }
/// <summary>
/// 产品种类(默认0,1:国际包裹投递2:国际包裹签收如果选择e 包裹业务,此字段将不能为空
/// </summary>
public int producttype { get; set; }
/// <summary>
/// 客户编码
/// </summary>
public string customercode { get; set; }
/// <summary>
/// 大客户编号使用者如果拥有EMS 大客户代码,应填入此字段
/// </summary>
public string vipcode { get; set; }
/// <summary>
/// 揽收类型1上门揽收或0用户自送
/// </summary>
public int clcttype { get; set; }
/// <summary>
/// 电子签收
/// </summary>
public bool pod { get; set; }
/// <summary>
/// 退回类型默认为Returned (Abandoned|AND I ASSURE TO PAY FOR THE CHARGE OF RETURN|Returned)
/// </summary>
public string untread { get; set; }
/// <summary>
/// 体积重量=长(单位:厘米)×宽(单位:厘米)×高(单位:厘米)/6000客户需填写长、宽、高及体积重量
/// </summary>
public int volweight { get; set; }
/// <summary>
/// 预约开始时间
/// </summary>
public DateTime startdate { get; set; }
/// <summary>
/// 预约终止时间
/// </summary>
public DateTime enddate { get; set; }
/// <summary>
/// 备注
/// </summary>
public string remark { get; set; }
/// <summary>
/// 客户自定义信息1
/// </summary>
public string sku1 { get; set; }
/// <summary>
/// 客户自定义信息2
/// </summary>
public string sku2 { get; set; }
/// <summary>
/// 订单条码,如果需要打印出标志该订单的条码,就填写该值
/// </summary>
public string barcode { get; set; }
/// <summary>
/// 该订单要求的的打印格式00 表示A401表示4×4标签03表示4×6标签默认值是01
/// </summary>
public string printcode { get; set; }
public string BuyID { get; set; }
/// <summary>
/// 寄件人信息
/// </summary>
public Eub_Person sender { get; set; }
/// <summary>
/// 快递收货人信息
/// </summary>
public Eub_Person collect { get; set; }
/// <summary>
/// 收件人信息
/// </summary>
public Eub_Person receiver { get; set; }
public List<Eub_Goods> ListGoods { get; set; }
public Eub_Order()
{
this.operationtype = 0;
this.producttype = 0;
this.printcode = "01";
sender = new Eub_Person();
collect = new Eub_Person();
receiver = new Eub_Person();
ListGoods = new List<Eub_Goods>();
}
public string ToXml()
{
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.Append("<orders xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");
sb.Append("<order>");
sb.Append("<orderid>"+this.Orderid+"</orderid>");
sb.Append("<operationtype>"+this.operationtype+"</operationtype>");
sb.Append("<producttype>" + this.producttype + "</producttype>");
sb.Append("<customercode>" + this.customercode + "</customercode>");
sb.Append("<vipcode>" + this.vipcode + "</vipcode>");
sb.Append("<clcttype>" + this.clcttype + "</clcttype>");
sb.Append("<pod>" + this.pod.ToString().ToLower() + "</pod>");
sb.Append("<untread>" + this.untread + "</untread>");
sb.Append("<volweight>" + this.volweight + "</volweight>");
sb.Append("<startdate>" + this.startdate.ToString("yyyy-MM-ddTHH:mm:ss") + "</startdate>");
sb.Append("<enddate>" + this.enddate.ToString("yyyy-MM-ddTHH:mm:ss") + "</enddate>");
sb.Append("<remark>" + this.remark + "</remark>");
sb.Append("<sku1>" + this.sku1 + "</sku1>");
sb.Append("<sku2>" + this.sku2 + "</sku2>");
sb.Append("<barcode>" + this.barcode + "</barcode>");
sb.Append("<printcode>" + this.printcode + "</printcode>");
sb.Append("<sender>");
sb.Append("<name>" + this.sender.name + "</name>");
sb.Append("<postcode>" + this.sender.postcode + "</postcode>");
sb.Append("<phone>" + this.sender.phone + "</phone>");
sb.Append("<mobile>" + this.sender.mobile + "</mobile>");
sb.Append("<country>" + this.sender.country + "</country>");
sb.Append("<province>" + this.sender.province + "</province>");
sb.Append("<city>" + this.sender.city + "</city>");
sb.Append("<county>" + this.sender.county + "</county>");
sb.Append("<company>" + this.sender.company + "</company>");
sb.Append("<street>" + this.sender.street + "</street>");
sb.Append("<email>" + this.sender.email + "</email>");
sb.Append("</sender>");
sb.Append("<receiver>");
sb.Append("<name>" + this.receiver.name + "</name>");
sb.Append("<postcode>" + this.receiver.postcode + "</postcode>");
sb.Append("<phone>" + this.receiver.phone + "</phone>");
sb.Append("<mobile>" + this.receiver.mobile + "</mobile>");
sb.Append("<country>" + this.receiver.country + "</country>");
sb.Append("<province>" + this.receiver.province + "</province>");
sb.Append("<city>" + this.receiver.city + "</city>");
sb.Append("<county>" + this.receiver.county + "</county>");
sb.Append("<company>" + this.receiver.company + "</company>");
sb.Append("<street>" + this.receiver.street + "</street>");
sb.Append("</receiver>");
sb.Append("<collect>");
sb.Append("<name>" + this.collect.name + "</name>");
sb.Append("<postcode>" + this.collect.postcode + "</postcode>");
sb.Append("<phone>" + this.collect.phone + "</phone>");
sb.Append("<mobile>" + this.collect.mobile + "</mobile>");
sb.Append("<country>" + this.collect.country + "</country>");
sb.Append("<province>" + this.collect.province + "</province>");
sb.Append("<city>" + this.collect.city + "</city>");
sb.Append("<county>" + this.collect.county + "</county>");
sb.Append("<company>" + this.collect.company + "</company>");
sb.Append("<street>" + this.collect.street + "</street>");
sb.Append("<email>" + this.collect.email + "</email>");
sb.Append("</collect>");
sb.Append("<items>");
foreach (var item in this.ListGoods)
{
sb.Append("<item>");
sb.Append("<cnname>" + item.cnname + "</cnname>");
sb.Append("<enname>" + item.enname + "</enname>");
sb.Append("<count>" + item.count + "</count>");
sb.Append("<unit>" + item.unit + "</unit>");
sb.Append("<weight>" + item.weight.ToString("f3") + "</weight>");
sb.Append("<delcarevalue>" + item.delcarevalue.ToString("f2") + "</delcarevalue>");
sb.Append("<origin>"+item.origin+"</origin>");
sb.Append("<description>" + item.description + "</description>");
sb.Append("</item>");
}
sb.Append("</items>");
sb.Append("</order>");
sb.Append("</orders>");
return sb.ToString();
}
}
#endregion
#region 寄件人或收货人或收件人信息
public class Eub_Person
{
/// <summary>
/// 姓名
/// </summary>
public string name { get; set; }
/// <summary>
/// 邮编
/// </summary>
public string postcode { get; set; }
/// <summary>
/// 电话
/// </summary>
public string phone { get; set; }
/// <summary>
/// 手机
/// </summary>
public string mobile { get; set; }
/// <summary>
/// 国家
/// </summary>
public string country { get; set; }
/// <summary>
/// 省份代码
/// </summary>
public string province { get; set; }
/// <summary>
/// 城市代码
/// </summary>
public string city { get; set; }
/// <summary>
/// 区县代码
/// </summary>
public string county { get; set; }
/// <summary>
/// 公司
/// </summary>
public string company { get; set; }
/// <summary>
/// 街道
/// </summary>
public string street { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string email { get; set; }
}
#endregion
#region 物品信息
public class Eub_Goods
{
/// <summary>
/// 中文名
/// </summary>
public string cnname { get; set; }
/// <summary>
/// 英文名
/// </summary>
public string enname { get; set; }
/// <summary>
/// 数量
/// </summary>
public int count { get; set; }
/// <summary>
/// 单位
/// </summary>
public string unit { get; set; }
/// <summary>
/// 重量,千克(三位小数),该重量是单个商品重量*数量
/// </summary>
public decimal weight { get; set; }
/// <summary>
/// 报关价格(两位小数),该价格是单个商品的报关价格*数量
/// </summary>
public decimal delcarevalue { get; set; }
/// <summary>
/// 原寄地固定填写CN
/// </summary>
public string origin { get; set; }
/// <summary>
/// 描述(英文)
/// </summary>
public string description { get; set; }
/// <summary>
/// 税则号填写2-8 位的数字(选填)
/// </summary>
public string taxationid { get; set; }
public Eub_Goods()
{
origin = "CN";
}
}
#endregion
#region 快递追踪信息
public class Eub_Trace
{
public DateTime? accepttime { get; set; }
public string acceptaddress { get; set; }
public string remark { get; set; }
}
#endregion
#region 运费估算
public class Eub_Fee
{
/// <summary>
/// 业务类型默认0:e 邮宝1:标识国际包裹2在线ems
/// </summary>
public int operationtype { get; set; }
/// <summary>
/// 重量信息,单位为克
/// </summary>
public decimal weight { get; set; }
/// <summary>
/// 国家简称
/// </summary>
public string recvcountry { get; set; }
/// <summary>
/// 原寄国家简称中国为CN
/// </summary>
public string sendcountry { get; set; }
/// <summary>
/// 省级代码
/// </summary>
public string sdprov { get; set; }
/// <summary>
/// 估算费用
/// </summary>
public decimal fee { get; set; }
/// <summary>
/// 备注
/// </summary>
public string remark { get; set; }
public string ToXml()
{
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.Append("<rate>");
sb.Append("<operationtype>" + this.operationtype + "</operationtype>");
sb.Append("<weight>" + this.weight.ToString("f3") + "</weight>");
sb.Append("<recvcountry>" + this.recvcountry + "</recvcountry>");
sb.Append("<sendcountry>" + this.sendcountry + "</sendcountry>");
sb.Append("<sdprov>" + this.sdprov + "</sdprov>");
sb.Append("</rate>");
return sb.ToString();
}
}
#endregion
public class TrackInfo
{
public Int32? ret { get; set; }
public string msg { get; set; }
public string g { get; set; }
public List<TrackInfodat> dat { get; set; }
}
public class TrackInfodat
{
public string no { get; set; }
public string delay { get; set; }
public string yt { get; set; }
public TrackInfotrack track { get; set; }
}
public class TrackInfotrack
{
public Int32? b { get; set; }
public Int32? c { get; set; }
public Int32? e { get; set; }
public Int32? f { get; set; }
public Int32? w1 { get; set; }
public Int32? w2 { get; set; }
public Int32? is1 { get; set; }
public Int32? is2 { get; set; }
public Int32? ygt1 { get; set; }
public Int32? ygt2 { get; set; }
public string ylt1 { get; set; }
public string ylt2 { get; set; }
public string yt { get; set; }
public TrackZ z0 { get; set; }
public List<TrackZ> z1 { get; set; }
public List<TrackZ> z2 { get; set; }
}
public class TrackZ
{
public string a { get; set; }
public string b { get; set; }
public string c { get; set; }
public string d { get; set; }
public string z { get; set; }
}
}