上门取件,是电商平台为寄件用户提供的通过一键下单到快递员,并在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();\
}\
}