目录

前言

一、订单发货接口

二、商家对接接口步骤

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<OrderBoBean> 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<String,OrderBoBean> 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

总结

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

抖店订单发货回传的实际开发笔记相关推荐

  1. 获取抖音抖店订单相关信息,用于私域引流脚本

    <?phpfunction http_request($url, $data = null, $header = null){$curl = curl_init();if(!empty($hea ...

  2. 【分享】“抖店“在集简云平台集成应用的常见问题与解决方案

    1.抖店出现错误码了怎么办? 抖店每次调用接口时,可能获得错误码,企业可以根据错误码信息调试接口,排查错误. 1)平台基础错误码汇总列表 主错误码(code) 主错误码描述(msg) 子错误码(sub ...

  3. 抖音 -抖店开放平台 SDK 实现及项目工程

    抖音 - 抖店开放平台 SDK 抖音 - 抖店开放平台:https://op.jinritemai.com/ 该 SDK 已实现 API 接口调用和消息推送验证解析 项目地址 github: gite ...

  4. 抖店无法及时发货,应该怎么处理?

    最近几年因为疫情原因,或者是其他不可抗力的因素,很多时候订单总是无法在规定时间发货,导致很多订单被退款,或者是被投诉.差评,影响了店铺的收益,甚至被扣保证金.湖北呼百应的很多学员都来问该怎么解决,今天 ...

  5. 四川翌加:抖音小店的发货时间是多长

    抖音小店的商家需要了解抖音店铺发货应该遵守哪些规则,如果在发货的时候出现了违规现象是会受到惩罚的,尤其是商家应该在承诺的时间将货物发出去,及时的更新物流单号.下面小编就给大家讲讲抖音小店的发货规则有哪 ...

  6. 对接抖店API-03 获取订单列表

    官方文档 : 抖店开放平台 DOUDIAN_URL :https://openapi-fxg.jinritemai.com 如果前面获取accessToken 和签名都完成了, 那获取订单会简单很多, ...

  7. 【实战】如何在手机上实时接收微信小店订单提醒

    用户在微信小店下单之后,我们作为微信小店的管理员并不会收到订单通知,因为腾讯官方并没有订单实时通知这个功能,关于这一点我们已经调研了很久,确实无疑. 因此,要么自己花钱请软件外包团队开发,要么寻找现成 ...

  8. 淘宝虚拟物品自动发货---DiPiPi网店自动发货助手免费版

    淘宝的卖家: 您还在为每天守着旺旺而累得不可开交吗? 您还在手工确认收款,然后手工逐个发货吗? 使用网店自动发货助手吧,7*24小时全自动发货,让你在工作.睡觉的时候都可以赚钱. 对于发货量较小的卖家 ...

  9. 抖音商家发货超时处罚规则,特殊情况及申诉要求是什么丨国仁猫哥

    在抖音上经营店铺的商家都很清楚,在抖音平台上,商家是可以根据自身库存情况.发货能力,视情况,在商品创建时自主设置发货时效的. 所以商家在发货商会比其他平台的商家要自由点,不过如果商家没有在规定的发货时 ...

最新文章

  1. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂
  2. C++知识点37——拷贝构造函数
  3. orbeon form 的架构简介 - 如何访问用户通过 form 存储的数据
  4. 简而言之Java.io:22个案例研究
  5. 光纤收发器产品的光电介质转换芯片选择性能指标介绍
  6. 使用visio 提示此UML形状所在的绘图页不是UML模型图的一部分 请问这个问题怎么解决?...
  7. [转载] 详解Java中的泛型
  8. C# string转double,double转string
  9. Android报错:FAILED:_nl_intern_locale_data: ?? ‘cnt < (sizeof (_nl_value_type_LC_TIME)
  10. verilog设计一个补码加减法运算器_一文搞懂:计算机中为什么用补码来存储数据?...
  11. 隐藏WIN10资源管理器中的3D对象文件夹
  12. 跨境电商指南:如何处理客户投诉
  13. CentOS7安装Oracle 11gR2详细记录整理
  14. 阿姆斯特朗数——————还记得大明湖畔的水仙花么(笑)
  15. 重启PocketPC移动设备
  16. Python:实现binomial distribution二项分布算法(附完整源码)
  17. c# mysql 批量导入_C#:MySql批量数量导入
  18. 如何升级pycharm 中pip的版本
  19. 二分图(染色法+匈牙利法)学习笔记
  20. html图片要存在哪里,将html中的图片和html保存在一个文件里

热门文章

  1. CFA中国之队国际女子足球锦标赛
  2. LMI工具箱之复线性矩阵不等式描述(含程序)
  3. 一加7P刷写Lsposed模块
  4. 宁要捧杀,不许真言?
  5. 2021-05-19Leetcode238.除自身以外数组的乘积
  6. 关于uniapp上传文件的一些api文档
  7. 内存溢出的危害_内存溢出和内存泄漏的区别
  8. mysql 外部键约束名_MySQL中外键的创建、约束以及删除
  9. uniapp开发:瀑布流 灵活配置 简单易用 兼容vue2vue3小程序、H5、app等多端
  10. redmine备份_redmine数据备份,迁移与恢复