电子面单接口申请对接说明


电商后台物流系统,仓管在发货时同步订单的发/收件人信息、货物信息,通过接口直接发送到快递公司并直接打印电子面单。


1.接口地址: API测试地址:http://testapi.kdniao.cc:8081/api/EOrderService

API正式地址:http://api.kdniao.cc/api/EOrderService

2.接口支持的消息接收方式:HTTP POST

3.请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"

4.订单编号(OrderCode)不可重复提交,重复提交系统会返回具体错误代码。

5.请求、返回数据类型:只支持JSON格式

6.接口提供:快递鸟

 

系统级参数定义

参数名称

类型

说明

必须要求

RequestData

String

请求内容需进行URL(utf-8)编码。请求内容JSON格式,须和DataType一致。

必填

EBusinessID

String

商户ID,请在我的服务页面查看。

必填

RequestType

String

请求指令类型:1007

必填

DataSign

String

数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码,最后进行URL(utf-8)编码。详细过程请查看Demo。

必填

DataType

String

请求、返回数据类型:只支持JSON格式

必填

 

(PHP对接源码)

<?php
 
//电商ID
defined('EBusinessID')or define('EBusinessID', '请申请http://www.kdniao.com/ServiceApply.aspx');
//电商加密私钥,注意保管,不要泄漏
defined('AppKey')or define('AppKey', '请申请http://www.kdniao.com/ServiceApply.aspx');
//请求url,接口正式地址:http://api.kdniao.cc/api/Eorderservice
defined('ReqURL')or define('ReqURL', 'http://testapi.kdniao.cc:8081/api/Eorderservice');
 
 
//调用获取物流轨迹
//-------------------------------------------------------------
 
//构造电子面单提交信息
$eorder= [];
$eorder["ShipperCode"]= "SF";
$eorder["OrderCode"]= "PM201604062341";
$eorder["PayType"]= 1;
$eorder["ExpType"]= 1;
 
$sender= [];
$sender["Name"]= "李先生";
$sender["Mobile"]= "18888888888";
$sender["ProvinceName"]= "李先生";
$sender["CityName"]= "深圳市";
$sender["ExpAreaName"]= "福田区";
$sender["Address"]= "赛格广场5401AB";
 
$receiver= [];
$receiver["Name"]= "李先生";
$receiver["Mobile"]= "18888888888";
$receiver["ProvinceName"]= "李先生";
$receiver["CityName"]= "深圳市";
$receiver["ExpAreaName"]= "福田区";
$receiver["Address"]= "赛格广场5401AB";
 
$commodityOne= [];
$commodityOne["GoodsName"]= "其他";
$commodity= [];
$commodity[]= $commodityOne;
 
$eorder["Sender"]= $sender;
$eorder["Receiver"]= $receiver;
$eorder["Commodity"]= $commodity;
 
 
//调用电子面单
$jsonParam= json_encode($eorder, JSON_UNESCAPED_UNICODE);
 
//$jsonParam= JSON($eorder);//兼容php5.2(含)以下
 
echo"电子面单接口提交内容:<br/>".$jsonParam;
$jsonResult= submitEOrder($jsonParam);
echo"<br/><br/>电子面单提交结果:<br/>".$jsonResult;
 
//解析电子面单返回结果
$result= json_decode($jsonResult, true);
echo"<br/><br/>返回码:".$result["ResultCode"];
if($result["ResultCode"]== "100") {
         echo "<br/>是否成功:".$result["Success"];
}
else{
         echo "<br/>电子面单下单失败";
}
//-------------------------------------------------------------
 
 
/**
 * Json方式查询订单物流轨迹
 */
functionsubmitEOrder($requestData){
         $datas = array(
        'EBusinessID' => EBusinessID,
        'RequestType' => '1007',
        'RequestData' =>urlencode($requestData) ,
        'DataType' => '2',
    );
    $datas['DataSign'] = encrypt($requestData,AppKey);
         $result=sendPost(ReqURL, $datas);     
        
         //根据公司业务处理返回的信息......
        
         return $result;
}
 
 
/**
 *  post提交数据
 * @param string $url 请求Url
 * @param array $datas 提交的数据
 * @return url响应返回的html
 */
functionsendPost($url, $datas) {
    $temps = array();
    foreach ($datas as $key => $value) {
        $temps[] = sprintf('%s=%s', $key,$value);                 
    }
    $post_data = implode('&', $temps);
    $url_info = parse_url($url);
         if($url_info['port']=='')
         {
                   $url_info['port']=80;   
         }
         echo $url_info['port'];
    $httpheader = "POST " .$url_info['path'] . " HTTP/1.0\r\n";
    $httpheader.= "Host:" .$url_info['host'] . "\r\n";
    $httpheader.="Content-Type:application/x-www-form-urlencoded\r\n";
    $httpheader.= "Content-Length:" .strlen($post_data) . "\r\n";
    $httpheader.="Connection:close\r\n\r\n";
    $httpheader.= $post_data;
    $fd = fsockopen($url_info['host'],$url_info['port']);
    fwrite($fd, $httpheader);
    $gets = "";
         $headerFlag = true;
         while (!feof($fd)) {
                   if (($header = @fgets($fd))&& ($header == "\r\n" || $header == "\n")) {
                            break;
                   }
         }
    while (!feof($fd)) {
                   $gets.= fread($fd, 128);
    }
    fclose($fd); 
   
    return $gets;
}
 
/**
 * 电商Sign签名生成
 * @param data 内容  
 * @param appkey Appkey
 * @return DataSign签名
 */
functionencrypt($data, $appkey) {
    returnurlencode(base64_encode(md5($data.$appkey)));
}
/**************************************************************
 *
 *  使用特定function对数组中所有元素做处理
 * @param  string  &$array     要处理的字符串
 * @param  string  $function  要执行的函数
 * @return boolean $apply_to_keys_also    是否也应用到key上
 * @access public
 *
 *************************************************************/ 
functionarrayRecursive(&$array, $function, $apply_to_keys_also = false) 
{ 
    static $recursive_counter = 0; 
    if (++$recursive_counter > 1000) { 
        die('possible deep recursionattack'); 
    } 
    foreach ($array as $key => $value){ 
        if (is_array($value)) { 
            arrayRecursive($array[$key],$function, $apply_to_keys_also); 
        } else { 
            $array[$key] =$function($value); 
        } 
  
        if ($apply_to_keys_also &&is_string($key)) { 
            $new_key = $function($key); 
            if ($new_key != $key) { 
                $array[$new_key] =$array[$key]; 
                unset($array[$key]); 
            } 
        } 
    } 
    $recursive_counter--; 
} 
 
 
/**************************************************************
 *
 *  将数组转换为JSON字符串(兼容中文)
 * @param  array   $array     要转换的数组
 * @return string      转换得到的json字符串
 * @access public
 *
 *************************************************************/ 
functionJSON($array) { 
    arrayRecursive($array, 'urlencode',true); 
    $json = json_encode($array); 
    return urldecode($json); 
} 
?>


(C#对接源码)


usingSystem;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Net;
usingSystem.Text;
usingSystem.Web;
 
namespaceKdGoldAPI
{
    public class KdApiEOrderDemo
    {
        //电商ID
        private string EBusinessID = "请申请http://www.kdniao.com/ServiceApply.aspx";
        //电商加密私钥,注意保管,不要泄漏
        private string AppKey = "请申请http://www.kdniao.com/ServiceApply.aspx";
        //请求url, 正式环境地址:http://api.kdniao.cc/api/Eorderservice
        private string ReqURL ="http://testapi.kdniao.cc:8081/api/EOrderService";
 
        /// <summary>
        /// Json方式  电子面单
        /// </summary>
        /// <returns></returns>
        public string orderTracesSubByJson()
        {
            string requestData ="{'OrderCode': '012657700312'," +
                                 "'ShipperCode':'YTO'," +
                                 "'PayType':1," +
                                 "'ExpType':1," +
                                 "'Cost':1.0," +
                                 "'OtherCost':1.0," +
                                 "'Sender':" +
                                  "{"+
                                 "'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," +
                                 "'Receiver':" +
                                  "{"+
                                 "'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," +
                                 "'Commodity':" +
                                  "[{" +
                                 "'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}],"+
                                 "'AddService':" +
                                 "[{" +
                                 "'Name':'COD','Value':'1020'}]," +
                                 "'Weight':1.0," +
                                 "'Quantity':1," +
                                 "'Volume':0.0," +
                                 "'Remark':'小心轻放',"+
                                  "'IsReturnPrintTemplate':1}";
 
            Dictionary<string, string>param = new Dictionary<string, string>();
            param.Add("RequestData",HttpUtility.UrlEncode(requestData, Encoding.UTF8));
            param.Add("EBusinessID",EBusinessID);
            param.Add("RequestType","1007");
            string dataSign =encrypt(requestData, AppKey, "UTF-8");
            param.Add("DataSign",HttpUtility.UrlEncode(dataSign, Encoding.UTF8));
            param.Add("DataType","2");
 
            string result = sendPost(ReqURL,param);
 
            //根据公司业务处理返回的信息......
 
            return result;
        }
 
        /// <summary>
        /// Post方式提交数据,返回网页的源代码
        /// </summary>
        /// <param name="url">发送请求的 URL</param>
        /// <param name="param">请求的参数集合</param>
        /// <returns>远程资源的响应结果</returns>
        private string sendPost(string url,Dictionary<string, string> param)
        {
            string result = "";
            StringBuilder postData = newStringBuilder();
            if (param != null &¶m.Count > 0)
            {
                foreach (var p in param)
                {
                    if (postData.Length > 0)
                    {
                       postData.Append("&");
                    }
                    postData.Append(p.Key);
                   postData.Append("=");
                    postData.Append(p.Value);
                }
            }
            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 = newStreamReader(backStream, Encoding.GetEncoding("UTF-8"));
                result = sr.ReadToEnd();
                sr.Close();
                backStream.Close();
                response.Close();
                request.Abort();
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }
            return result;
        }
 
        ///<summary>
        ///电商Sign签名
        ///</summary>
        ///<paramname="content">内容</param>
        ///<paramname="keyValue">Appkey</param>
        ///<paramname="charset">URL编码</param>
        ///<returns>DataSign签名</returns>
        private string encrypt(String content,String keyValue, String charset)
        {
            if (keyValue != null)
            {
                return base64(MD5(content +keyValue, charset), charset);
            }
            return base64(MD5(content,charset), charset);
        }
 
        ///<summary>
        /// 字符串MD5加密
        ///</summary>
        ///<param name="str">要加密的字符串</param>
        ///<paramname="charset">编码方式</param>
        ///<returns>密文</returns>
        private string MD5(string str, stringcharset)
        {
            byte[] buffer =System.Text.Encoding.GetEncoding(charset).GetBytes(str);
            try
            {
               System.Security.Cryptography.MD5CryptoServiceProvider check;
                check = newSystem.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>
        /// <paramname="charset">编码方式</param>
        /// <returns></returns>
        private string base64(String str,String charset)
        {
            returnConvert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));
        }
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值