快递鸟有很详细的介绍,附上链接: http://www.kdniao.com/api-eorder
快递鸟官方也Demo,可以下载直接用,自己处理一下业务逻辑即可
以下基于测试环境,申请相关账号不做介绍
public class KdEOrder {
private static SaleExpressService saleExpressService = SpringContextHolder.getBean(SaleExpressService.class);
//电商ID
private String EBusinessID = "111";
//电商加密私钥,快递鸟提供,注意保管,不要泄漏
private String AppKey = "222";
//请求url,
//正式环境地址:http://api.kdniao.cc/api/Eorderservice
//测试环境地址:http://testapi.kdniao.cc:8081/api/EOrderService
private String ReqURL = "http://testapi.kdniao.cc:8081/api/Eorderservice";
/**
* Json方式 电子面单
*
*/
public String orderOnlineByJson(String requestData) throws Exception {
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);
Map maps = (Map) JSON.parse(result);
if ("false".equals(maps.get("Success").toString())){
result = "未找到快递信息! "+ maps.get("Reason").toString();
}else{
result = maps.get("PrintTemplate").toString();
Map order = (Map) JSON.parse(maps.get("Order").toString());
String logisticCode = order.get("LogisticCode").toString();
String orderCode = order.get("OrderCode").toString();
SaleExpress saleExpress = new SaleExpress();
saleExpress.setOrderCode(orderCode);
try {
saleExpress = saleExpressService.findList(saleExpress).get(0);
} catch (Exception e) {
throw new BusinessException("未找到快递信息!");
}
//如果快递单号为空,保存返回的快递单号
if (StringUtils.isBlank(saleExpress.getLogisticCode())) {
saleExpress.setLogisticCode(logisticCode);
saleExpressService.save(saleExpress);
}
}
return result;
}
}
以下可以不看
以下为个人写的测试版应用,代码还有待优化
保存方法
@Transactional(readOnly = false)
public void save(SaleExpress saleExpress) {
if (saleExpress.getShipperCode().equals("YD")){
saleExpress.setCustomerName("testyd");
saleExpress.setCustomerPwd("testydpwd");
} else if (saleExpress.getShipperCode().equals("YTO")){
saleExpress.setCustomerName("testyto");
saleExpress.setMonthCode("testytomonthcode");
}else if (saleExpress.getShipperCode().equals("ZTO")){
saleExpress.setCustomerName("testzto");
saleExpress.setCustomerPwd("testztopwd");
}else if (saleExpress.getShipperCode().equals("STO")){
saleExpress.setCustomerName("teststo");
saleExpress.setCustomerPwd("teststopwd");
}else if (saleExpress.getShipperCode().equals("DBL")){
saleExpress.setCustomerName("testdbl");
}
//EMS好像需要这些参数,否则会报错2018年1月是这样
else if (saleExpress.getShipperCode().equals("EMS")){
if (StringUtils.isBlank(saleExpress.getGoodsWeight())){
saleExpress.setGoodsWeight("1");
}if (StringUtils.isBlank(saleExpress.getGoodsQuantity())){
saleExpress.setGoodsQuantity("1");
}if (StringUtils.isBlank(saleExpress.getGoodsVolume())){
saleExpress.setGoodsVolume("1");
}
}
if (saleExpress.getIsNewRecord()) {
saleExpress.setOrderCode(findMaxCode());
}
super.save(saleExpress);
}
打印电子面单走的方法
我用的是字符串拼接,也可以用其他方法将自己的数据转为API需要的Json类型的String,不过API需要的类型需要注意单双引号,我直接转没有成功由于引号的问题
@RequestMapping(value = "saleExpressPrint")
public String saleExpressPrint(String orderCode, Model model) {
SaleExpress saleExpress = new SaleExpress();
saleExpress.setOrderCode(orderCode);
try {
saleExpress = saleExpressService.findList(saleExpress).get(0);
} catch (Exception e) {
throw new BusinessException("未找到原快递信息!");
}
String requestData = "{" +
"'OrderCode': '" + saleExpress.getOrderCode() + "'," +
"'ShipperCode':'" + saleExpress.getShipperCode() + "'," +
"'PayType':" + saleExpress.getPayType() + "," +
"'ExpType':" + saleExpress.getExpType() + "," +
"'IsNotice':" + saleExpress.getIsNotice() + ",";
if (StringUtils.isNotBlank(saleExpress.getMonthCode())) {
requestData += "'MonthCode':'" + saleExpress.getMonthCode() + "',";
}
if (StringUtils.isNotBlank(saleExpress.getCost())) {
requestData += "'Cost':'" + saleExpress.getCost() + "',";
}
if (StringUtils.isNotBlank(saleExpress.getOtherCost())) {
requestData += "'OtherCost':'" + saleExpress.getOtherCost() + "',";
}
if (StringUtils.isNotBlank(saleExpress.getCustomerName())) {
requestData += "'CustomerName':'" + saleExpress.getCustomerName() + "',";
}
if (StringUtils.isNotBlank(saleExpress.getCustomerPwd())) {
requestData += "'CustomerPwd':'" + saleExpress.getCustomerPwd() + "',";
}
requestData +=
"'Sender':" +
"{" +
"'Company':'" + saleExpress.getSenderCompany() +
"','Name':'" + saleExpress.getSenderName() +
"','Mobile':'" + saleExpress.getSenderMobile() +
"','ProvinceName':'" + saleExpress.getSenderProvinceName() +
"','CityName':'" + saleExpress.getSenderCityName() +
"','ExpAreaName':'" + saleExpress.getSenderExpareaName() +
"','Address':'" + saleExpress.getSenderAddress() + "'}," +
"'Receiver':" +
"{" +
"'Company':'" + saleExpress.getReceiverCompany() +
"','Name':'" + saleExpress.getReceiverName() +
"','Mobile':'" + saleExpress.getReceiverMobile() +
"','ProvinceName':'" + saleExpress.getReceiverProvinceName() +
"','CityName':'" + saleExpress.getReceiverCityName() +
"','ExpAreaName':'" + saleExpress.getReceiverExpareaName() +
"','Address':'" + saleExpress.getReceiverAddress() + "'}," +
"'Commodity':" +
"[{" + "'GoodsName':'" + saleExpress.getGoodsName() + "',";
if (StringUtils.isNotBlank(saleExpress.getGoodsQuantity())) {
requestData += "'Goodsquantity':" + saleExpress.getGoodsQuantity() + ",";
}
if (StringUtils.isNotBlank(saleExpress.getGoodsWeight())) {
requestData += "'GoodsWeight':" + saleExpress.getGoodsWeight() + ",";
}
if (StringUtils.isNotBlank(saleExpress.getGoodsVolume())) {
requestData += "'GoodsVol':" + saleExpress.getGoodsVolume() + "}],";
}
requestData += "'Remark':'" + saleExpress.getExpressRemarks() + "'," +
"'IsReturnPrintTemplate':1}";
// JSONObject json = JSONObject.fromObject(requestData);
KdEOrder kdEOrder = new KdEOrder();
String result = "";
try {
result = kdEOrder.orderOnlineByJson(requestData);
} catch (Exception e) {
e.printStackTrace();
}
model.addAttribute("result", result);
return "modules/scm/sale/saleExpressPrint";
}
电子面单的打印页面
最后返回的result就是想要的电子面单html了<%@ taglib prefix="from" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
<html>
<head>
<title>打印</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="${ctxStatic}/jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
<script type="text/javascript" src="${ctxStatic}/common/jquery.jqprint.js"></script>
<script>
function printData() {
$("#mains").jqprint();
}
</script>
</head>
<body>
<div id="mains" style="text-align: center">
${result}
</div>
</body>
</html>