快递员上门取件api接口,快递在线下单技术对接指南

300 阅读4分钟

上门取件,是电商平台为寄件用户提供的通过一键下单到快递员,并在2小时上门取件的寄件服务。适用于散客在线寄件、电商退货上门取件等业务场景;通过API指令由系统自动将消息发送给物流公司和快递员,由快递员上门取货揽件与在线收款;解决寄件客户不用线下找快递员、不用苦苦等待,通过上门取件服务让客户可以轻松选择约定时间、地点完成寄件需求。

一、快递员上门取件

快递鸟上门取件,是电商平台为寄件用户提供一键下单到快递员,并在2小时上门取件的寄件服务。适用于在线寄件、退换货等业务。

(1)API接口地址: www.kdniao.com/product-ord…

(2)注册免费获取API KEY地址: www.kdniao.com/reg?from=os…

(3)获取技术文档地址: www.kdniao.com/api-pickup?…

二、产品功能

1,一键退换货

在app或后台一键退货,不用线下找快递员,不用苦苦等待即可完成发货。

快递员一键退换货服务

2,在线支付运费

快递员上门取件与在线收款,通过APP在线支付运费,告别线下或私下转款等传统支付方式。

快递员在线支付运费服务

3,预约上门时间

递员实时接单响应,并统一在上门前电话联络,在两小时后内上门揽收后回到网点将包裹发送分拨中心。

预约快递员上门时间

4、运费险赔付

服务过程中因物流公司原因出现快递丢失、破损等情况,提供保障赔付。

5、智能调度订单

根据不同时效产品,智能分派服务的快递公司(包括但不限于圆通、申通、韵达、中通、京东、德邦、顺丰等)。

三、上门取件应用场景

1、移动端APP、公众号、电商等提供的散客寄件下单模块,通过上门取件直接预约快递员上门揽件,支持在线支付运费;

2、电商平台、自营电商售后退货退款时,买家通过平台直接预约快递员上门揽件,支持在线支付运费;

四、客户案例

小红书:买家售后寄件后,快递员2小时上门取件

五、应用客户

六、试用流程

七、接入流程

八、demo下载 接口接入技术文档

上门取件接口Demo工具.NET版
上门取件接口Demo工具.PHP版
上门取件接口Demo工具.JAVA版
上门取件接口Demo工具.PYTHON版
上门取件接口Demo工具.GO版
上门取件接口Demo工具.NODE.JS版

九、请求代码例示

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](https://my.oschina.net/futurebee): 4009633321\
* @技术QQ群: 200121393\
* [@see](https://my.oschina.net/weimingwei): http://www.kdniao.com/api-order\
* [@copyright](https://my.oschina.net/u/732349): 深圳市快金数据技术服务有限公司\
* \
* 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\
    private string ReqURL = "http://testapi.kdniao.cc:8081/api/oorderservice";\
    //正式请求url\
    //private string ReqURL = "http://api.kdniao.cc/api/OOrderService";

    /**\
     * Json方式 在线下单\
     * [@throws](https://my.oschina.net/throws) Exception \
     */\
    public String orderOnlineByJson() throws Exception{\
        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':'小心轻放'," +\
                                  "'Commodity':" +\
                                  "[{" +\
                                  "'GoodsName':'鞋子'," +\
                                  "'Goodsquantity':1," +\
                                  "'GoodsWeight':1.0}]" +\
                                  "}";

        Map<String, String> params = new HashMap<String, String>();\
        params.put("RequestData", urlEncoder(requestData, "UTF-8"));\
        params.put("EBusinessID", EBusinessID);\
        params.put("RequestType", "1001");\
        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();\
    }\
}