快递电子面单 对接快递鸟

快递鸟有很详细的介绍,附上链接: 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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值