C# 调用中通快递查询物流轨迹接口

时间:2022-08-30 23:14:57

    首先得申请开发者账号,貌似现在只能已公司名义填写相关信息,有账号后,登陆开发者中心,到接口处申请你所需要的接口,等待审核,这个过程有点长,时间在一个星期左右不等,不然没有接口的使用权限。

    开发时里面有对应的相关文档,建议自己COPY下来,因没有下载的,而且还是分开几种,所以还是自己COPY下来写在一个文档里查看起来比较好。

    部分原文(开发文件部分):

-------------------------------------------------------------------------------

1、中通支持的消息接收方式为 HTTPPOST 和 GET。

   如果以 HTTP POST 方式发送,请求方法的编码格式:

  "application/x-www-form-urlencoded;charset=GBK"。

   如果以GET方式发送,请将参数链接在 URL 的后面。 

2、在 POST 时用 "data" 字段表示要发送的 JSON 内容。 

3、在 POST 时用 "data_digest" 字段进行签名验证。签名使用 MD5 方式,对 data 的内容进行签名。

   原理为:通知内容 JSON + partnerID (联调时分配的签名),然后进行 MD5,转换为 Base64 字符串。

   详细解释如下:

   假设 JSON 内容为: JSON,parternID为 123456 那么要签名的内容为 JSON123456(默认GBK 编

   码),经过 md5 和 base64 后的内容就为 yhmQhg2ZiWCMc91nH0/vsg = = 最终要发送的数据为 :

  data = JSON & data_digest = yhmQhg2ZiWCMc91nH0/vsg == & msg_type=? & company_id =?。

(data_digest = base64(md5(data+key)))

4、要求合作商收到消息后,一定要验证数据是否完整及正确。 

5、合作商收到消息后,内容不正确?请检查字符集是否为 GBK/UTF-8;所有的参数都是通过 URL 编码

  传送的,符合 HTTP 协议,注意客户端是否解码正确,有些控件已经自带 URL 解码功能,请开发人

  员注意。

       注意:有些接口不需要使用parternID对数据进行签名校验

-------------------------------------------------------------------------------

    因为在签名这部分,经常会出现S02的错误,所以在签名的时候,最好用文档里的字符串先测试一下,看得到的结果是不是一样的,不然只能是签名错误。

C#:加密方法和请求方法可以用开发文档提供的(下面是自己写的方法)

  private void btn_post_Click(object sender, EventArgs e)
        {
            string di = null;
            string jobno = "123456";//单号
            string k = "xxx";//key
            di = "['" + jobno + "']" + k;
            di = Base64(MDD5(di, Encoding.UTF8));
            string url = "接口";
            string postDate = "data=['"+ jobno +"']&data_digest=" + di + "&msg_type=xxxxxx&company_id=xxxxxx=" + jobno + "";
            byte[] ByteArray = Encoding.UTF8.GetBytes(postDate);
            HttpWebRequest mHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            mHttpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
            mHttpWebRequest.Method = "POST";         
            mHttpWebRequest.ContentLength = ByteArray.Length;
            Stream ReqStream = mHttpWebRequest.GetRequestStream();
            ReqStream.Write(ByteArray, 0, ByteArray.Length);
            ReqStream.Close();
            //接收返回信息:
            HttpWebResponse response = (HttpWebResponse)mHttpWebRequest.GetResponse();
            StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string Message = php.ReadToEnd(); //接收到的请求返回信息,然后自己解析得到自己想要的信息      
        }
		
	/// <summary>
        /// MD5
        /// </summary>
        public static byte[] MDD5(string input, Encoding encodeType)
        {
            MD5 md5Hash = MD5.Create();
            return md5Hash.ComputeHash(encodeType.GetBytes(input));
        }

        /// <summary>
        /// Base64
        /// </summary>
        /// <param name="md5"></param>
        /// <returns></returns>
        public static string Base64(byte[] md5)
        {
            return Convert.ToBase64String(md5);

        }


JAVA我会重新写一个。