如何用C# 实现免费快递查询API接口对接

224 阅读2分钟

接口对接常见的问题基本上是数据签名错误导致的接口联调失败,而API接口是获取网络服务最便捷的方式,合理地使用API接口开发项目可以大大提高开发效率,把精力都集中在程序的业务逻辑之上,避免重复造轮子。

本期给大家讲解:如何用C# 实现免费快递查询API接口对接。非常简单,略懂技术的菜鸟也能直接对接。​​首先要注册一个快递鸟的账号:点击注册

方法调用的代码实现

string eEBusinessID = "test1617571";  
//电商加密私钥,快递鸟提供,注意保管,不要泄漏  
string appKey= "554343b2-7252-439b-b4eb-1af42c8f2175";  
//请求url  
string reqURL = "http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";  
//请求指令  
string reqType="1002";  
//2-json  
string dataType = "2";  
//字符编码采用UTF-8  
string charset = "UTF-8";  
//JSON字符串string  
string jsonStr =  
"{\"OrderCode\":\"\",\"ShipperCode\":\"SF\",\"LogisticCode\":\"118461988807\"}" ;  
//把(jsonStr+APIKey)进行MD5加密  
string md5Str=MD5(jsonStr + apiKey, charset);  
//把md5Str 进行Base64编码  
string base64Str=base64(md5Str,charset);  
//进行URL编码 (utf-8)  
string datasign = HttpUtility.UrlEncode(base64Str, charset);  
//请求报文参数  
string postStr = "RequestType=reqType&EBusinessID= eEBusinessID&RequestData=jsonStr  
&DataSign= datasign&DataType=dataType";  
//通讯协议使用Http协议Post请求方式 返回轨迹数据  
string post = SendPost(reqURL, postStr);  
//获取到的post数据就是快递鸟返回的完整报文,接下来自己写一个解析json的方法就能获取到里面的字段信息。

C#封装的方法

/// 字符串MD5加密  
///</summary>  
///<param name="str">要加密的字符串</param>  
///<param name="charset">编码方式</param>  
///<returns>密文</returns>  
private string MD5(string str, string charset)  
{  
byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);  
try  
{  
System.Security.Cryptography.MD5CryptoServiceProvider check;  
check = new System.Security.Cryptography.MD5CryptoServiceProvider();  
byte[] somme = check.ComputeHash(buffer);  
string ret = "";  
foreach (byte a in somme)  
{  
if (a < 16)  
ret += "0" + a.ToString("X");  
else  
ret += a.ToString("X");  
}  
return ret.ToLower();  
}  
catch  
{  
throw;  
}  
}  
/// <summary>  
/// base64编码  
/// </summary>  
/// <param name="str">内容</param>  
/// <param name="charset">编码方式</param>  
/// <returns></returns>  
private string base64(String str, String charset)  
{  
return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));  
}  
/// <summary>  
/// Post方式提交数据,返回网页的源代码  
/// </summary>  
/// <param name="url">发送请求的 URL</param>  
/// <param name="postData">请求报文参数</param>  
/// <returns>远程资源的响应结果</returns>  
private string SendPost(string url, string postData)  
{  
string result = "";  
byte[] byteData = Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());  
try  
{  
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  
request.ContentType = "application/x-www-form-urlencoded";  
request.Referer = url;  
request.Accept = "*/*";  
request.Timeout = 30 * 1000;  
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";  
request.Method = "POST";  
request.ContentLength = byteData.Length;  
Stream stream = request.GetRequestStream();  
stream.Write(byteData, 0, byteData.Length);  
stream.Flush();  
stream.Close();  
HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
Stream backStream = response.GetResponseStream();  
StreamReader sr = new StreamReader(backStream, Encoding.GetEncoding("UTF-8"));  
result = sr.ReadToEnd();  
sr.Close();  
backStream.Close();  
response.Close();  
request.Abort();  
}  
catch (Exception ex)  
{  
result = ex.ToString();  
}  
return result;  
}

下期大家想看什么内容,可以在下方留言或私信我,大家一起探讨。