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#

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden 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.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; }
}
}