菜鸟物流云属于淘宝开放平台的一部分,淘宝开发平台提供了很多种对接接口,包括商品、销售单等等,几乎涉及到的业务都在该平台上开放了接口。
淘宝开放平台提供了两种快递面单接口,一种是淘宝商家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