各种电子面单-Api接口(顺丰快递鸟菜鸟)

Posted 独立开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各种电子面单-Api接口(顺丰快递鸟菜鸟)相关的知识,希望对你有一定的参考价值。

文章目录

术语

对于一般人,电子面单的意思可能并不是很了解;说白了,就是快递员给你打印的快递单的电子版。

专业解释:

电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务。通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍。电子面单以接口形式嵌入到自己的系统、网站上,可以在自己的平台操作打印电子面单。
#电子面单样式

对接接口各家对比

  1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必须快递公司上门做系统对接,使用一家快递则需要对接一次。
  2. 菜鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接。支持快递有四通一达、EMS、宅急送、德邦、优速、天天、快捷、全峰等15家常用快递公司,其中不包括顺丰
  3. 快递鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接。支持快递有四通一达、顺丰、EMS、宅急送、德邦、优速等15家快递公司,对顺丰有电子面单服务需求的可以选择顺丰自有的电子面单或者是快递鸟电子面单

各家合作流程对比

  1. 快递电子面单接口
    a. 和多家快递公司申请账号
    b.分别进行接口对接
    c.电子面单服务用户向快递网点申请开通及确认合作细节

  2. 菜鸟电子面单
    a.向菜鸟网络提交对接申请
    b.和菜鸟进行接口对接
    c.电子面单服务用户向菜鸟申请账号
    d.电子面单服务用户向快递网点申请开通及确认合作细节

  3. 快递鸟电子面单
    a. 进入申请账号,获取专属的ID和KEY
    b.和快递鸟进行接口对接
    c.电子面单服务用户向快递网点申请开通及确认合作细节;当然,顺丰电子面单稍微特殊一点,即:顺丰接入快递鸟立马可以使用,无需注册账号。

接口定义及说明

由于,当前快递鸟支持的电子面单接口相对于其他家的有一定优势;所以以下主要以快递鸟为例进行展开阐述一一说明。

Request Params

Api接口:http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx
请求方式:POST
编码:UTF-8

系统级参数(公共参数)

参数名称类型说明是否必需
RequestDataString请求内容需进行URL(utf-8)编码。请求内容JSON格式,须和DataType一致R
EBusinessIDString商户ID,请在我的服务页面查看R
RequestTypeString请求指令类型:1007R
DataSignString数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码,最后进行URL(utf-8)编码。详细过程请查看DemoR
DataTypeString请求、返回数据类型:只支持JSON格式O

备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选(Conditional)。

接口参数

参数名称类型说明是否必需
CallBackString用户自定义回调信息O
MemberIDString会员标识O
CustomerNameString电子面单客户账号(与快递网点申请)O
CustomerPwdString电子面单密码O
SendSiteString收件网点标识O
ShipperCodeString快递公司编码R
LogisticCodeString快递单号O
OrderCodeString订单编号R
MonthCodeString月结编码C
PayTypeInt邮费支付方式:1-现付,2-到付,3-月结,4-第三方支付R
ExpTypeString快递类型:1-标准快件R
CostDouble寄件费(运费)O
OtherCostDouble其他费用O
StartDateString上门取货时间段:"yyyy-MM-dd HH:mm:ss"格式化,本文中所有时间格式相同O
EndDateString上门取货时间段:"yyyy-MM-dd HH:mm:ss"格式化,本文中所有时间格式相同O
WeightDouble物品总重量kgO
QuantityInt件数/包裹数O
VolumeDouble物品总体积m3O
RemarkString备注O
IsReturnPrintTemplateString返回电子面单模板:0-不需要;1-需要O
ReceiverCompanyString收件人公司O
NameString收件人R
TelString电话与手机,必填一个R
MobileString电话与手机,必填一个R
PostCodeString收件人邮编O
ProvinceNameString收件省(如广东省,不要缺少“省”)R
CityNameString收件市(如深圳市,不要缺少“市”)R
ExpAreaNameString收件区(如福田区,不要缺少“区”或“县”)O
AddressString收件人详细地址R
SenderCompanyString发件人公司O
NameString收件人R
TelString电话与手机,必填一个R
MobileString电话与手机,必填一个R
PostCodeString发件人邮编O
ProvinceNameString发件省(如广东省,不要缺少“省”)R
CityNameString发件市(如深圳市,不要缺少“市”)R
ExpAreaNameString发件区(如福田区,不要缺少“区”或“县”)O
AddressString发件人详细地址R
AddServices
AddServiceNameString增值服务名称O
ValueString增值服务值O
CustomerIDString客户标识(选填)O
Commoditys
CommodityGoodsNameString商品名称R
GoodsCodeString商品编码O
GoodsquantityString商品数量O
GoodsPriceString商品价格O
GoodsWeightString商品重量kgO
GoodsDescString商品描述O
GoodsVolString商品体积m3O

Response Params

参数名称类型说明是否必需
EBusinessIDString用户IDR
SuccessBool成功与否R
ResultCodeString错误编码R
ReasonString失败原因O
UniquerRequestNumberString唯一标识R
PrintTemplateString面单打印模板O
EstimatedDeliveryTimeString订单预计到货时间yyyy-mm-ddO
CallbackString用户自定义回调信息O
OrderOrderCodeString订单编号R
ShipperCodeString快递公司编码R
LogisticCodeString快递单号R
MarkDestinationString大头笔O
OriginCodeString始发地区域编码O
OriginNameString始发地/始发网点O
DestinatioCodeString目的地区域编码O
DestinatioNameString目的地/到达网点O
SortingCodeString分拣编码O
PackageCodeString集包编码O

Java栗子

注:此栗子仅供参考,如要使用请到官方下载对应语言的Demo即可。

import java.io.BufferedReader;
import java.io.IOException; 
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.security.MessageDigest; 

/**
 *
 * 快递鸟电子面单接口
 *
 * @技术QQ: 4009633321
 * @技术QQ群: 200121393
 * @see: http://www.kdniao.com/MiandanAPI.aspx
 * @copyright: 深圳市快金数据技术服务有限公司
 * 
 * ID和Key请到官网申请:http://www.kdniao.com/ServiceApply.aspx
 */
 
public class KdGoldAPIDemo 
    
    //电商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";    
    

    /**
     * Json方式 电子面单
     * @throws Exception 
     */
    public String orderOnlineByJson() throws Exception
        String requestData= "'OrderCode': '012657700387'," +
                "'ShipperCode':'EMS'," +
                "'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]," +
                "'Weight':1.0," +
                "'Quantity':1," +
                "'Volume':0.0," +
                "'Remark':'小心轻放'," +
                "'IsReturnPrintTemplate':1";
        
        Map<String, String> params = new HashMap<String, String>();
        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
        params.put("EBusinessID", EBusinessID);
        params.put("RequestType", "1007");
        String dataSign=encrypt(requestData, AppKey, "UTF-8");
        params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
        params.put("DataType", "2");
        
        String result=sendPost(ReqURL, params);    
        
        //根据公司业务处理返回的信息......
        
        return result;
    
    /**
     * MD5加密
     * @param str 内容       
     * @param charset 编码方式
     * @throws Exception 
     */
    @SuppressWarnings("unused")
    private String MD5(String str, String charset) throws Exception 
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes(charset));
        byte[] result = md.digest();
        StringBuffer sb = new StringBuffer(32);
        for (int i = 0; i < result.length; i++) 
            int val = result[i] & 0xff;
            if (val <= 0xf) 
                sb.append("0");
            
            sb.append(Integer.toHexString(val));
        
        return sb.toString().toLowerCase();
    
    
    /**
     * base64编码
     * @param str 内容       
     * @param charset 编码方式
     * @throws UnsupportedEncodingException 
     */
    private String base64(String str, String charset) throws UnsupportedEncodingException
        String encoded = Base64.encode(str.getBytes(charset));
        return encoded;    
        
    
    @SuppressWarnings("unused")
    private String urlEncoder(String str, String charset) throws UnsupportedEncodingException
        String result = URLEncoder.encode(str, charset);
        return result;
    
    
    /**
     * 电商Sign签名生成
     * @param content 内容   
     * @param keyValue Appkey  
     * @param charset 编码方式
     * @throws UnsupportedEncodingException ,Exception
     * @return DataSign签名
     */
    @SuppressWarnings("unused")
    private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception
    
        if (keyValue != null)
        
            return base64(MD5(content + keyValue, charset), charset);
        
        return base64(MD5(content, charset), charset);
    
    
     /**
     * 向指定 URL 发送POST方法的请求     
     * @param url 发送请求的 URL    
     * @param params 请求的参数集合     
     * @return 远程资源的响应结果
     */
    @SuppressWarnings("unused")
    private String sendPost(String url, Map<String, String> params) 
        OutputStreamWriter out = null;
        BufferedReader in = null;        
        StringBuilder result = new StringBuilder(); 
        try 
            URL realUrl = new URL(url);
            HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // POST方法
            conn.setRequestMethod("POST");
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.connect();
            // 获取URLConnection对象对应的输出流
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            // 发送请求参数            
            if (params != null) 
                  StringBuilder param = new StringBuilder(); 
                  for (Map.Entry<String, String> entry : params.entrySet()) 
                      if(param.length()>0)
                          param.append("&");
                                        
                      param.append(entry.getKey());
                      param.append("=");
                      param.append(entry.getValue());                      
                      System.out.println(entry.getKey()+":"+entry.getValue());
                  
                  System.out.println("param:"+param.toString());
                  out.write(param.toString());
            
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) 
                result.append(line);
            
         catch (Exception e)             
            e.printStackTrace();
        
        //使用finally块来关闭输出流、输入流
        finally
            try
                if(out!=null)
                    out.close();
                
                if(in!=null)
                    in.close();
                
            
            catch(IOException ex)
                ex.printStackTrace();
            
        
        return result.toString();
    

其他Api接口,请转到快递鸟具体查看相关文档。

同类文章

各种快递查询Api接口(快递鸟)

以上是关于各种电子面单-Api接口(顺丰快递鸟菜鸟)的主要内容,如果未能解决你的问题,请参考以下文章

常用电子面单接口API及对接攻略(快递鸟菜鸟顺丰)

免费顺丰快递单号查询电子面单api接口对接快递鸟API

查顺丰快递用啥接口?

电子面单api接口_JAVA调用示例

常用电子面单接口对接技术文档

电商适用电子面单接口对接案例