偷懒多时,现在补上之前说过的商家寄件实现。
先简单定义一下商家寄件场景:电商或企业集中在一个或多个地点,批量往全国各地发货。往往是一个门店,一个仓库,或一个代运营点。
再说一下,为啥要用商家寄件?
现在快递网点比较多,满街都是快递员再跑,找个网点或快递员来寄个件是很轻松的事情,为啥还要选这个商家寄件呢?原因主要有如下几点:
- 成本。随随便便找个网点或快递员,是很方便但是价格通常比较高,一年下来物流成本会较高。
- 服务。顺便叫的快递员,通常需要看快递员方便的时间来,不如商家寄件是经过优选的快递员,服务时效及质量都要靠谱一些。
- 管理。如果门店较多,或商铺较多,需要有完整的系统来同意管理,以免出现爆单的时候乱七八糟或漏洞百出。整体效率和关键节点的把控都会更好些。
看到这里,基本上是需要的同学了。不废话了,看一下商家寄件整体流程:
- 查询发件地是否有运力(能不能寄或者说有木有快递员来收)
在这里插入代码片
- 商家寄件(选择合适的运力来填写信息,生成快递单)
- 获取验证码(寄件成功后,生成一个取件码,快递员上门时候完成验证收货)
- 后续跟踪或取消订单(取件成功后,订阅快递轨迹信息方客户便后续查询;有其他问题暂时不寄时取消订单)
每个点对应一个接口,自己实现一下就搞定了。
代码看这里:Java版 | .Net版
/**
* 商家寄件查询运力
* 快递100的基础账号信息,可以在这里获取 (需要填写完整才能测试)
* https://poll.kuaidi100.com/manager/page/myinfo/enterprise
*/
@Test
public void testBorderQuery() throws Exception {
BaseReq<BOrderQueryReq> param = new BaseReq<BOrderQueryReq>();
BOrderQueryReq bOrderQueryReq = new BOrderQueryReq();
bOrderQueryReq.setSendAddr("福田区华强南");
String t = String.valueOf(System.currentTimeMillis());
param.setKey(key);
param.setSign(SignUtils.sign(new Gson().toJson(bOrderQueryReq) + t + key + secret));
param.setT(t);
param.setParam(bOrderQueryReq);
BOrder bOrder = new BOrder();
System.out.println(bOrder.transportCapacity(param));
}
/**
* 商家寄件
*/
@Test
public void testBorder() throws Exception {
BaseReq<BOrderReq> param = new BaseReq<BOrderReq>();
BOrderReq bOrderReq = new BOrderReq();
bOrderReq.setKuaidicom(CompanyConstant.ZT);
bOrderReq.setSendManName("张三");
bOrderReq.setSendManMobile("15966666666");
bOrderReq.setSendManPrintAddr("广东深圳市福田区华强南");
bOrderReq.setRecManName("李四");
bOrderReq.setRecManMobile("15966666666");
bOrderReq.setRecManPrintAddr("广东深圳市南山区金蝶软件园");
bOrderReq.setCallBackUrl("http://www.baidu.com");
bOrderReq.setCargo("文件");
bOrderReq.setRemark("测试下单,待会取消");
bOrderReq.setWeight("1");
bOrderReq.setSalt("123456");
bOrderReq.setServiceType("标准快递");
String t = String.valueOf(System.currentTimeMillis());
param.setKey(key);
param.setSign(SignUtils.sign(new Gson().toJson(bOrderReq) + t + key + secret));
param.setT(t);
param.setParam(bOrderReq);
BOrder bOrder = new BOrder();
System.out.println(bOrder.order(param));
}
/**
* 商家寄件获取验证码
*/
@Test
public void testBorderGetCode() throws Exception {
BaseReq<BOrderGetCodeReq> param = new BaseReq<BOrderGetCodeReq>();
BOrderGetCodeReq bOrderGetCodeReq = new BOrderGetCodeReq();
bOrderGetCodeReq.setTaskId("CE181BBD30C0F9BF531AB456CCE278E7");
bOrderGetCodeReq.setOrderId("100012021501262");
String t = String.valueOf(System.currentTimeMillis());
param.setKey(key);
param.setSign(SignUtils.sign(new Gson().toJson(bOrderGetCodeReq) + t + key + secret));
param.setT(t);
param.setParam(bOrderGetCodeReq);
BOrder bOrder = new BOrder();
System.out.println(bOrder.getCode(param));
}
/**
* 商家寄件取消
*/
@Test
public void testBorderCancel() throws Exception {
BaseReq<BOrderCancelReq> param = new BaseReq<BOrderCancelReq>();
BOrderCancelReq bOrderCancelReq = new BOrderCancelReq();
bOrderCancelReq.setTaskId("CE181BBD30C0F9BF531AB456CCE278E7");
bOrderCancelReq.setOrderId("100012021501262");
bOrderCancelReq.setCancelMsg("测试单取消");
String t = String.valueOf(System.currentTimeMillis());
param.setKey(key);
param.setSign(SignUtils.sign(new Gson().toJson(bOrderCancelReq) + t + key + secret));
param.setT(t);
param.setParam(bOrderCancelReq);
BOrder bOrder = new BOrder();
System.out.println(bOrder.cancel(param));
}
另外,这个需要快递100的企业版,先自己去注册一下获取key。