C# 实现快递鸟API接口签名 对接更高效

接口对接常见的问题基本上是数据签名错误导致的接口联调失败,大家在电商平台调用快递鸟接口时,为了提供对接效率,给大家提供一些方法供大家参考。

方法调用的代码实现

//电商ID

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#封装的方法

///<summary>

    /// 字符串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;

    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,537评论 0 13
  • 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换...
    x360阅读 2,516评论 1 20
  • 英文文档,一开始我也是抗拒的,边翻译边看,也就花费了1个小时基本就阅读过了,我的英文基础其实很差。附上链接:链接:...
    lonecolonel阅读 10,036评论 3 1
  • 啊。当初说是来这里写故事的,但是写着写着才发现严重跑题了,变得开始琐碎起来,不再是关于谁的故事,变成了一个公开的日...
    小和思红豆阅读 97评论 0 0
  • 今天在家整理时,发现我摘抄的文章和句子竟然有厚厚三四本,我都不知道自己在什么时候写下的,有关于怎样读书的,有销售的...
    把记忆封存阅读 511评论 1 4