SpringBoot使用菜鸟物流云打印电子面单

菜鸟物流云属于淘宝开放平台的一部分,淘宝开发平台提供了很多种对接接口,包括商品、销售单等等,几乎涉及到的业务都在该平台上开放了接口。
淘宝开放平台提供了两种快递面单接口,一种是淘宝商家TOP接口,一种是菜鸟物流云Link接口。这里主要是LINK,具体介绍请查看淘宝开发平台的文档:

前期准备

先贴一下API链接 电子面单接入口
下面是主要用到的
在这里插入图片描述

“电子面单业务基本介绍”—可查看各个公司的cpCode
先按照“ISV软件商接入”流程走一遍,然后主要用到的API都在“电子面单LINK接口总览”

一、jar

在“ISV软件商接入”中1.9.1 物流云SDK下载,直接复制到浏览器地址栏打开即可下载

二、工具类

1.可根据需要再整理

import com.google.common.collect.Maps;
import com.taobao.pac.sdk.cp.PacClient;
import com.taobao.pac.sdk.cp.SendSysParams;
import com.taobao.pac.sdk.cp.dataobject.request.CLOUDPRINT_STANDARD_TEMPLATES.CloudprintStandardTemplatesRequest;
import com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_DISCARD.TmsWaybillDiscardRequest;
import com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_GET.*;
import com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_SUBSCRIPTION_QUERY.TmsWaybillSubscriptionQueryRequest;
import com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_UPDATE.Recipient;
import com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_UPDATE.TmsWaybillUpdateRequest;
import com.taobao.pac.sdk.cp.dataobject.response.CLOUDPRINT_STANDARD_TEMPLATES.CloudprintStandardTemplatesResponse;
import com.taobao.pac.sdk.cp.dataobject.response.CLOUDPRINT_STANDARD_TEMPLATES.StandardTemplateResult;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_DISCARD.TmsWaybillDiscardResponse;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_GET.TmsWaybillGetResponse;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_GET.WaybillCloudPrintResponse;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_SUBSCRIPTION_QUERY.AddressDto;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_SUBSCRIPTION_QUERY.TmsWaybillSubscriptionQueryResponse;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_SUBSCRIPTION_QUERY.WaybillApplySubscriptionInfo;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_SUBSCRIPTION_QUERY.WaybillBranchAccount;
import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_UPDATE.TmsWaybillUpdateResponse;
import com.wr.business.entity.Order;
import com.wr.business.entity.Sender;
import lombok.extern.log4j.Log4j2;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;


/**
 * @Author: 可乐伢
 * @Date: 2021-4-12 19:59
 */
@Log4j2
public class WaybillUtils {
   
    /**
     * 线上环境请求url
     */
    private final static String ONLINE_URL = "http://link.cainiao.com/gateway/link.do";
    /**
     * 线上环境appKey,物流云控制台查看
     */
    private final static String ONLINE_APP_KEY = "";
    /**
     * 线上环境secretKey,物流云控制台查看
     */
    private final static String ONLINE_SECRET_KEY = "";
    /**
     * 线上环境token,token是商家在物流云平台授权ISV后生成的授权码,目前需要商家配置在ISV的软件中
     */
    private final static String ONLINE_TOKEN = "";

    /**
     * 查询电子面单订购关系以及账户情况 获取发货地址
     * @return
     */
    public static AddressDto waybillSubscriptionQuery(){
   

        PacClient client = new PacClient(ONLINE_APP_KEY, ONLINE_SECRET_KEY, ONLINE_URL);
        SendSysParams params = new SendSysParams();
        params.setFromCode(ONLINE_TOKEN);

        TmsWaybillSubscriptionQueryRequest request = new TmsWaybillSubscriptionQueryRequest();
        TmsWaybillSubscriptionQueryResponse tmsWaybillSubscriptionQueryResponse = client.send(request, params);
        if(!tmsWaybillSubscriptionQueryResponse.isSuccess()){
   
            log.info("errorCode:" + tmsWaybillSubscriptionQueryResponse.getErrorCode() + "errorMessage:" + tmsWaybillSubscriptionQueryResponse.getErrorMsg());
            return null;
        }
        List<WaybillApplySubscriptionInfo> wasiList=tmsWaybillSubscriptionQueryResponse.getWaybillApplySubscriptionCols();
        log.info(wasiList);
        List<WaybillBranchAccount> wbaList;
        if(null!=wasiList&&wasiList.size()>0){
   
            wbaList=wasiList.get(0).getBranchAccountCols();
            if(null!=wbaList&&wbaList.size()>0){
   
                if(null!=wbaList.get(0).getShippAddressCols()&&wbaList.get(0).getShippAddressCols().size()>0){
   
                    return wbaList.get(0).getShippAddressCols().get(0);
                }
            }
        }
        return null;
    }

    /**
     * 设置发件人信息
     * @param addressDto
     * @return
     */
    public static UserInfoDto setSender(Sender sender,AddressDto addressDto){
   
        //根据业务设置一个默认的发件人姓名
        String name=sender!=null?sender.getSenderName():"xxx";

        //发件人信息
        UserInfoDto senderInfo = new UserInfoDto();
        //发件人姓名
        senderInfo.setName(name);
        //发件人固定电话
        senderInfo.setPhone(sender.getMobile());
        //发件人手机号
        senderInfo.setMobile(sender.getMobile());

        //寄件地址,这里的地址需要是卖家订购电子面单服务时使用的订购地址,具体可以通过TMS_WAYBILL_SUBSCRIPTION_QUERY接口获取
        com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_GET.AddressDto
                sendAddress = new com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_GET.AddressDto();
        sendAddress.setProvince(addressDto.getProvince());
        sendAddress.setCity(addressDto.getCity());
        sendAddress.setDistrict(addressDto.getDistrict());
        sendAddress.setTown(addressDto.getTown());
        sendAddress.setDetail(addressDto.getDetail());

        senderInfo.setAddress(sendAddress);
        return senderInfo;
    }

    /**
     * 设置订单信息
     * @param objectId 请求id(与参数传入时相同)
     * @param templateUrl
     * @param orderCodes
     * @param items
     * @param receiver
     * @return
     */
    public static  List<TradeOrderInfoDto> setOrderList(String objectId, String templateUrl,
                                                        List<String> orderCodes, List<Item> items,
                                                        UserInfoDto receiver){
   
        //收件信息
        ArrayList<TradeOrderInfoDto> tradeOrderInfoDtos = new ArrayList<TradeOrderInfoDto>();

        TradeOrderInfoDto tradeOrderInfoDto = new TradeOrderInfoDto();
        tradeOrderInfoDto.setObjectId(objectId);

        //打印模板的url,参见白皮书
        tradeOrderInfoDto.setTemplateUrl(templateUrl);

        //设置订单
        OrderInfoDto orderInfoDto = new OrderInfoDto();
        orderInfoDto.setOrderChannelsType("OTHERS");
        orderInfoDto.setTradeOrderList(orderCodes);
        tradeOrderInfoDto.setOrderInfo(orderInfoDto);

        //设置包裹
        PackageInfoDto packageInfoDto = new PackageInfoDto();
        packageInfoDto
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值