抖店订单发货回传的实际开发笔记
创始人
2024-04-09 18:47:09

目录

前言

一、订单发货接口

二、商家对接接口步骤

1.业务逻辑分析

2.业务逻辑代码

总结


前言

主要是以前有对接过抖店开放平台,所以现在想要记录一下,做一个笔记,好好归纳一下,当时对接订单发货接口,是怎么实现的,以及后来的优化点又有哪些。

一、订单发货接口

这个接口是在抖店开放平台的商家自研文档中的, 是专门给有能力对接的商家回传自家的物流号给到自家店铺的订单标记发货用的,从官方文档看,它就是/order/logisticsAdd(订单发货接口),它暂时只支持整单出库,即接口调用时入参只能传父订单号。Tips:部分发货状态下的父订单,调此接口发货,会报错:该订单当前为“部分发货”状态,无法调用此接口。

这个接口的请求参数如图所示:

 那么它的响应参数又是什么呢,正常的响应如下所示:

 就是code的值必须为10000,才代表你的这个订单的物流号已经成功回传给到开放平台,且开放平台已成功标记为发货状态。

二、商家对接接口步骤

1.业务逻辑分析

第一步,我们先想设计好开发的方案,

首先,我们根据发货接口的请求参数,得到,订单号是必须要的,还有物流公司name、物流公司code、快递单号等参数等等。

然后,我们需要根据我们的自身商家的业务分析多种场景的情况,

第1个场景,就是我们抖店运营人员有时需要根据她们那边的需求,有时会人工导单到自家ERP系统中,然后再由自家ERP系统推单给到中通发货,中通一般会在当天回传该订单的物流号,

而这里的物流号又会分为2种情况:

1种情况就是需要回传物流号给到抖店开放平台的,标记订单发货的;

而第2种情况就是,不需要回传物流号给到抖店开放平台的,这里又会分为2种情况出现;

第1个就是抖店运营会跟抖音平台上的达人合作,由达人进行直播带货,那么由这个达人直播带货而产生的订单,到时它的订单是会传到我们自家商家店铺这边的,到时,我们这边进行拉单的时候,是可以拉取到这些达人带货的订单的,但是,如果我们想要通过这个接口回传物流号给到订单标记发货是不行的,只能通过抖音运营那边,手工给物流号提供给到达人那边标记发货,所以,我们这边就不需要再调用接口回传物流号了,所以我们会直接标记这个订单的一个状态为”已回传处理“,这样,下次,查询这些订单时,会把这些发货的订单号给过滤掉。

第2个就是福袋,就是直播随机抽奖的福袋,这样的订单,也是不需要回传物流号给到抖店开放平台的,所以,这部分订单也是不需要调用接口回传物流号,所以同样。我们会直接标记这个订单的一个状态为”已回传处理“。

上面这里的这2个都是不需要回传物流号的场景;接下来,就是需要回传物流号的了。

只要我们ERP系统的物流对照表中,如果中通已经回传了该订单的物流号,都会被标记在这个对照表中,到时,我们只需要开发好这个接口,通过定时任务,每天定一段时间调用接口轮询,查询这个时间内的订单的物流号是否已存在,如果存在,则立马调用抖店开放平台的发货接口标记订单发货,否则,则等待该订单的物流号回来后,在调用处理,在调用成功后,我们需要回标这个订单的状态为”已回传处理“。

2.业务逻辑代码

首先,是接口开始前,我们先轮询遍历获取到符合条件的订单,这些符合条件的订单,就是已经是发货状态,且推单给到中通物流那边了的,且已经回传运单号的了,只有符合这些条件的,才可以查询到。

       LogisticsAddBoResponse response = new LogisticsAddBoResponse();response.setErrOrderNos(Lists.newArrayList());response.setSuccessOrderNos(Lists.newArrayList());BoCriteria criteria = new BoCriteria();criteria.setStatus(CodeItemKeys.T_ORDER_STATUS_DELIVER);criteria.setExpressStatusEmpty(true);criteria.setExprIdEmpty(false);//不允许运单号为空criteria.setTranBackToSales(0);     // 回传标识,0代表待回传,1代表已回传,2代表取消List orderBeans = OrderService.findBeansByOrderNos(criteria);if(CollectionUtils.isEmpty(orderBeans)){response.setMessage("抖店_批量订单发货接口"+LocalDateTime.now().format(dateTimeFormatter)+",未查询到需配送订单");return response;}GlobalConfig.initAppKey(projectConfig.getTiktokECommerceAppId());  GlobalConfig.initAppSecret(projectConfig.getTiktokECommerceAppSecret());  AccessToken accessToken = AccessTokenBuilder.build(Long.valueOf(projectConfig.getTiktokECommerceDefaultStoreId()));  BizAssert.isTrue(accessToken.getAccessToken()!= null,"很抱歉,抖店发货生成并获取token失败;返回来的token为空null");Map duplicateOrderNoCheckMap = new HashMap<>();String companyCode = projectConfig.getTikTokLogisticsDefaultCode();  TiktokLogisticsCompanyCriteria logisticsCompanyCriteria = new TiktokLogisticsCompanyCriteria();logisticsCompanyCriteria.setCode(companyCode);TiktokLogisticsCompanyBean logisticsCompanyBean = TiktokLogisticsCompanyService.findOneBean(logisticsCompanyCriteria);

上面的代码,可以分解为三大部分,第一部分就是准备订单的数据,第二部分就是获取token,第三部分就是准备物流公司等相关信息的数据。

接下来的这一部分代码就是分场景的:

这部分的代码就是正常的请求发货接口标记发货的代码了,由orderLogisticsAddRequest中的execute的请求方法执行,得到了res响应后,我们在做进一步的处理,首先,是标记该订单为”已回传状态“。

OrderLogisticsAddResponse res = orderLogisticsAddRequest.execute(accessToken);
logger.info("抖音发货接口返回的响应体"+res.toString());
logger.info(""+CodeItemKeys.TIKTOK_API_RES_CODE_SUCCESS.equals(res.getCode().longValue()));
if(CodeItemKeys.TIKTOK_API_RES_CODE_SUCCESS.equals(res.getCode().longValue())) {successOrderNum++;OrderExpressBean updateBean = BeanUtils.copy(order,OrderExpressBean.class);BizAssert.isTrue(StringUtils.isNotBlank(updateBean.getOrderNo()),"很抱歉,更新order_express失败,不存在order_no订单号");                    updateBean.setExprStatus(CodeItemKeys.ORDER_EXPRESS_STATUS_DELIVER);updateBean.setTranBackToSales(1);  //将它设置为1,代表已经回传成功
Integer updateSql = OrderExpressService.updateBeanByOrderNo(updateBean);logger.error("订单批量发货成功的订单:"+channelOrderId);logger.info("订单批量发货成功的订单:"+channelOrderId);response.getSuccessOrderNos().add(channelOrderId);

接下来的代码是不需要回传的场景的:

我们这边就是根据res.getSubCode()响应中返回来的SubCode,来进行判断,第1个就是已重复发货的判断,因为有些时候的抖店订单,是通过运营人工导入到我们系统中,所以物流号回传后,它是可以按上面的逻辑回传给到平台,但是,有可能它没有标记的情况发生,所以在这加多一个判断,如果已重复回传,则标记为”已回传处理“即可。

另一种情况,就是抖音运营人员有时会自己人工导抖音单到订单表上,推到中通发货,这种类型的订单,是不需要回传给抖音的,而这时候的res.getSubCode()响应中返回来的SubCode,它是订单不存在的code,所以根据这个code判断,这些订单可以标记为"已回传处理"即可。

if(CodeItemKeys.TIKTOK_API_RES_CODE_FAIL_DELIVER.equals(res.getSubCode())){   logger.info("返回来的错误码==="+res.getSubCode());logger.info("说明该订单已经回传物流号了");OrderExpressBean updateBean = BeanUtils.copy(order,OrderExpressBean.class);BizAssert.isTrue(StringUtils.isNotBlank(updateBean.getOrderNo()),"很抱歉,更新order_express失败,不存在order_no订单号");updateBean.setExprStatus(CodeItemKeys.ORDER_EXPRESS_STATUS);updateBean.setTranBackToSales(1);  //将它设置为1,代表已经回传成功Integer updateSql = OrderExpressService.updateBeanByOrderNo(updateBean);logger.error("订单批量发货==重复发货的订单:"+channelOrderId);logger.info("订单批量发货==重复发货的订单:"+channelOrderId);}//TODO 抖音运营人员有时会自己人工导抖音单到订单表上,推到中通发货,这种类型的订单,是不需要回传给抖音的if(CodeItemKeys.API_RES_CODE_FAIL_NULL.equals(res.getSubCode())){logger.info("返回来的错误码==="+res.getSubCode());logger.info("说明该订单在抖音平台上的店铺中不存在");OrderExpressBean updateBean = BeanUtils.copy(order,OrderExpressBean.class);updateBean.setExprStatus(CodeItemKeys.ORDER_EXPRESS_STATUS_DELIVER);updateBean.setTranBackToSales(1);  //将它设置为1,代表已经回传成功Integer updateSql = OrderExpressService.updateBeanByOrderNo(updateBean);}

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context


总结

主要是以前有对接过抖店开放平台,所以现在想要记录一下,做一个笔记,好好归纳一下,当时对接订单发货接口,是怎么实现的,以及后来的优化点又有哪些。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...