抖音开发对接之订单取消消息

news2024/9/21 11:06:30

目录

前言

一、抖音开发中的订单取消消息

二、抖音运营反馈的业务需求分析

三、整体的业务开发思路

四、订单取消消息的代码开发

1.订单取消消息的使用

2.实时保存抖音平台过来的订单取消消息

3.具体的订单业务处理

总结


前言

       这里主要是介绍一下抖音开放平台的这个消息退款的实际使用开发,抖音开发平台提供了一个实时退款的消息推送功能,那这时,我们需要对接这个推送功能,它如何通知到对接的系统里面就很关键,如果不通知到位的话,会造成我们的商品损失,因为不通过消息传递到我们的系统里面的话,那么我们的系统就会默认这个订单是整单发货出去的,那么物流就会整单发货出去,但这人家家已经退款了的,如果在整单发货出去,就是我们商家的损失了。

      所以,实时的退款消息通知我们自研系统就显得很重要了。

一、抖音开发中的订单取消消息

 买家发起订单取消消息:doudian_trade_TradeCanceled

这里先讲述一下消息的message,首先,它会触发的场景有如下:

1、货到付款订单且订单状态为「待确认」,买家和商家可取消订单

2、货到付款订单且订单状态为「备货中」,买家、商家和平台客服可取消订单

3、货到付款订单且订单状态为「已发货」,物流状态为拒收或退回

4、在线支付订单且订单状态为「待付款」,买家可取消该订单

5、在线支付订单因风控取消后

消息过来的整体数据参数如下:

  这个是data里面所包含的参数如下:

 在这里,我们主要是要用到父订单id

二、抖音运营反馈的业务需求分析

需求分析如下:
      1. 第1种场景:
                             订单未被拉取到数据库中,在平台上仍然是“待发货”的状态, 客户已经取消整个订单;
         解决方案:消息通知,查询订单表,如果没有查询到该订单号,则代表该订单还没拉入到数据库内,则消息无需处理,那最后,在抖音订单拉单这一个环节,需要设置过滤掉已退款状态的订单即可。
       2.第2种场景:
                           订单已经被拉取到数据库中,但是物流快递单号还没回传,在平台上仍然是“待发货”的状态,客户已经取消整个订单:
           解决方案:消息通知,查询到该订单,如果该订单已经推送到物流系统发货了,则发短信通知到抖音运营人员,人工拦截物流;如果该订单还没有推送到物流系统发货,则调用物流系统的相关接口,取消出库操作等等。
 

三、整体的业务开发思路


 最终方案:
                1.先开发消息推送的功能,先把过来的消息保存在第三方消息表中
                 2. 然后开启异步操作,在实时查询订单表,是否有该订单号,如果无,无需处理
                 3.如果有,则判断该订单是否已经推送到物流系统发货,如果无,则调用物流相关的接口,取消出库
                 4.如果有,则发短信通知抖音运营人员,人工拦截物流发货等操作。

四、订单取消消息的代码开发

1.订单取消消息的使用

代码如下(示例):

    /**
     * 接收抖音第三方开发平台推送过来的订单取消消息
     * @param httpRequest
     * @return
     */
    @ApiOperation(tags = "TiktokEkOrder", value = "getDoudianEkShopDataPush", httpMethod = "POST",
            notes = "接收抖音第三方开发平台推送过来的消息")
    @AllowAnonymous
     @ResponseBody
    @PostMapping(value = "/getDoudianEkShopDataPush")
    public DoudianEkPushResult doudianEkShopDataPush(HttpServletRequest httpRequest) {
        DoudianEkPushResult result = tiktokEkOrderBiz.doudianEkShopDataPush(httpRequest);
        return result;
    }

2.实时保存抖音平台过来的订单取消消息

代码如下(示例):

 public DoudianEkPushResult doudianEkShopDataPush(HttpServletRequest httpRequest){
        DoudianPushResult result = new DoudianPushResult();
            String msgId = pushDataTestList.get(0).getMsgId();
            try {
                DoudianPushMessage pushMessage = DoudianUtils.getPushMessage(httpRequest, APP_SECRET, APP_KEY);
//                logger.info("获取到抖音售后订单消息:" + pushMessage);
                if (!pushMessage.isSuccess()) {
//                    logger.error("接收抖音第三方开发平台推送过来的消息 解析推送数据失败");
                    result.setCode(40041);
                    result.setMsg("解析推送数据失败");
                } else if (DoudianUtils.isEmpty(pushMessage.getData())) {
                    result.setCode(40041);
                    result.setMsg("解析推送数据为空");
//                    logger.error("接收抖音第三方开发平台推送过来的消息 解析推送数据为空");
                } else {
                    logger.info("接收抖音第三方开发平台推送过来的消息 请求体;{}", Jack.toJson(pushMessage.getData()));
                    //存储消息操作
                    // TODO  消息
                    if(pushMessage.getData().get(0).getTag().equals("106")) {
                        TiktokMsgNotifyBean tiktokMsgNotifyBean = new TiktokMsgNotifyBean();
                        tiktokMsgNotifyBean.setMsgType("106");                    // 取消订单类型消息
                        tiktokMsgNotifyBean.setMsgContent(pushMessage.getBody());  // 消息体
                        tiktokMsgNotifyBean.setProcResult("20");                   // 待处理状态
                        Integer a = tiktokMsgNotifyService.save(tiktokMsgNotifyBean);
                        logger.info("新增了" + a + "条消息");
                    }
                    List<DoudianPushData> pushDataList = pushMessage.getData();
                        // 业务处理
                     
                        createThead(pushDataList);        // java 异步处理
                        // 接收处理成功
                        result.setCode(0);
                        result.setMsg("success");
//                        logger.info(" 接收抖音第三方开发平台推送过来的消息 接收处理成功");
                }
                // 回复抖音返回来的推送消息
                return result;
            } catch (Exception e) {
                // 接收处理失败
                result.setCode(40044);
                result.setMsg("接收处理失败消息");
            }

        return result;
    }

3.具体的订单业务处理

通过查询第三方消息表,遍历订单取消消息,获取到订单取消消息data数据,然后转化成java对象,在进行具体的业务处理

代码如下(示例):

List<TiktokMsgNotifyBean>tiktokMsgNotifyBeans=tiktokOrderService.findTiktokMsgNotifyBeans();   // 查询抖音消息表
        for(int i = 0; i<tiktokMsgNotifyBeans.size(); i++ ){
           String body = tiktokMsgNotifyBeans.get(i).getMsgContent();
            List<DoudianPushData> pushDataList = getDatas(body);
            for (DoudianPushData pushData : pushDataList) {
                if ("106".equals(pushData.getTag())) {
                    try {
                        
                        logger.info("获取到抖音取消订单消息106:" + pushData.getTag());
                        DoudianTradeTradeCanceled106 tradeTradeCanceled106 = pushData.toObject(DoudianTradeTradeCanceled106.class);
                        BizAssert.isTrue(tradeTradeCanceled106 != null, "接收抖音第三方开发平台推送过来的消息 消息体 TAG106 转Objecct失败");
                        // 具体业务处理
                     
                            } 


总结

       这里主要是介绍一下抖音开放平台的这个消息退款的实际使用开发,抖音开发平台提供了一个实时退款的消息推送功能,那这时,我们需要对接这个推送功能,它如何通知到对接的系统里面就很关键,如果不通知到位的话,会造成我们的商品损失,因为不通过消息传递到我们的系统里面的话,那么我们的系统就会默认这个订单是整单发货出去的,那么物流就会整单发货出去,但这人家家已经退款了的,如果在整单发货出去,就是我们商家的损失了。

       所以,实时的退款消息通知我们自研系统就显得很重要了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis数据结构之字典

目录 字典的应用场景 源码实现 hash算法的实现&#xff0c; hash冲突的解决 扩容缩容机制 哈希表的扩展与收缩条件 渐进式rehash 线程是否安全 Redis的dictht 和 Java(jdk1.8)的HashMap有什么区别 线程安全性 hash算法 解决hash冲突的方法 扩容机制 字典的应用场景…

Navicat的安装及如何将PG库内的数据导出CSV

一、Navicat的安装 1、安装 双击安装 Navicat Premium 12.0.18.0 简体中文 64位.exe 2、编辑连接&#xff0c;进行连接测试 具体配置信息可以进docker容器内查看 二、将PG库内的数据导出CSV 1、进入docker容器&#xff08;docker exec -it postgres_v3 bash&#xff09;&#…

中国开源年会报名 | StarRocks 极速湖仓分析的探索与实践

开源年度盛会 2022 第七届中国开源年会 (COSCon22) 来啦&#xff01; 本次年会将于 10 月 29-30 日由开源社举办&#xff0c;线上共设有1个主论坛和16个分论坛&#xff0c;线下分会场遍布成都、深圳、上海、北京等11个城市。StarRocks PMC 赵恒将代表社区出席大数据专场&#…

【Python】pycharm 和 vscode 编辑器设置模版

author: jwensh time: 2022.10.29 1. pycharm 模版 打开 PyCharm 设置界面&#xff0c;搜索 template&#xff0c;选择 File and Code Templates > Python Script 如下图所示&#xff0c;输入自定义模板代码 模版内容设置 #!/usr/bin/env python # -*- coding: utf-8 -*…

非遗在线商城小程序(后台PHP开发)

目 录 1绪论 1 1.1 选题及意义 1 1.2 国内外文献综述 2 1.3 研究的主要内容 3 2 系统工具 5 2.1 微信小程序 5 2.2 ThinkPHP 5 框架 7 2.3 RESTFul API 8 2.4 微信支付技术 10 2.5 MySQL数据库 12 3 系统分析 14 3.1 市场定位分析 14 3.2 可行性分析 14 3.3 需求目标 14 3.3.1 …

彻底理解Java并发:ReentrantLock锁

本篇内容包括&#xff1a;为什么使用 Lock、Lock 锁注意事项、ReentrantLock 和 synchronized 对比、ReentrantLock &#xff08;加锁、解锁、公平锁与非公平锁、ReentrantLock 如何实现可重入&#xff09;等内容。 一、Lock 锁 1、为什么使用 Lock synchronized 线程等待时间…

Filter快速入门、Filter执行流程、Filter使用细节、Listener概念、分类、ServletContextListener使用

文章目录FilterFilter快速入门Filter 执行流程Filter使用细节ListenerServletContextListener 使用Filter 概念&#xff1a;Filter表示过滤器&#xff0c;是 JavaWeb三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一。过滤器可以把对资源的请求拦截下来&#x…

DASCTF X GFCTF 2022十月挑战赛web

前言 晚来的比赛web题解&#xff0c;这次buu的十月赛web部分的题目对于我来说质量还是蛮高的&#xff0c;因为这几天比较忙&#xff0c;一直没有去复现总结&#xff0c;不过该复现的还得复现&#xff0c;复现了这次比赛又能学到不少知识&#xff0c;嘿嘿嘿。 EasyPOP 考察ph…

Mega-Nerf学习笔记

Mega-NeRF:Scalable Construction of Large-Scale NeRFs for Virtual Fly-Throughs 主页&#xff1a;https://meganerf.cmusatyalab.org/ 论文&#xff1a;https://meganerf.cmusatyalab.org/resources/paper.pdf 代码&#xff1a;https://github.com/cmusatyalab/mega-nerf …

【设计模式】简单工厂模式

简单工厂模式–》工厂模式—》抽象工厂模式 文章目录简单工厂模式定义&#xff1a;各个角色1. 抽象产品类2. 具体产品类&#xff1a;3. 工厂类&#xff1a;简单工厂模式的核心。客户端设计图表未使用简单工厂模式&#xff1a;出现的问题&#xff1a;使用简单工厂模式&#xff1…

小熊派-FreeRTOS-点灯学习过程-20221029

一、前言准备 1、小熊派一个&#xff08;STM32L431RCT6&#xff09; 2、STM32CubeMX 3、keil5 4、小熊派的配套开发资料&#xff08;用于出问题的时候替换&#xff09; 二、实现过程 代码主要由STM32CubeMX生成&#xff0c;所以过程主要是配置CubeMX. 1、芯片选型 STM3…

用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)

目录 打包前置知识 一、什么是exe可执行文件&#xff1f; 二、为什么要将 Python 程序打包为 exe 可执行文件&#xff1f; 三、为什么 Python 程序不能直接运行呢&#xff1f; 四、我们用什么来打包 Python 文件呢&#xff1f; 五、打包有哪几种分类呢&#xff1f; 打包…

【ArcGIS微课1000例】0041:ArcGIS利用坐标生成点的方法总结

本文讲解ArcGIS利用坐标生成点的3种方法。 文章目录 一、转到XY工具定位二、输入绝对XY生成点三、添加XY数据一、转到XY工具定位 这样确实可以在图上快速定位某个经纬度的点,但是生成的对象是“注记类”要素,即不是地理实体,而仅仅是为了绘图表现的东西。可以用如下工具来控…

Kotlin协程-并发处理-基础

一、协程与并发 Kotlin协程是基于线程执行的。经过一层封装以后&#xff0c;Kotlin协程面对并发&#xff0c;处理方式与Java不同。 在java的世界里&#xff0c;并发往往是多个线程一起工作&#xff0c;存在共享的变量。需要处理好同步问题。要避免把协程与线程的概念混淆。 …

验证码的编写

编写一个验证码(可以通过键盘输入需要获取验证码的位数)&#xff1a; public class IdentifyingCode {public static void main(String[] args) {//验证码的编写IdentifyingCode identifyingCode new IdentifyingCode();//扫描键盘输入Scanner scanner new Scanner(System.i…

【数据结构基础】之数组介绍,生动形象,通俗易懂,算法入门必看

【数据结构基础】数组前言一、数组的定义1.基本概念和内存图2.数组的性质3.数据结构二、玩转数组1.循环遍历打印数组的每一个值2.查找一个数组里存在的值3.打擂台的形式找最大值4.元素的位移5.数组的扩容6.数组的反转三、二维数组四、初识算法1.排序算法2.查找算法3.算法性能4.…

电力电子的一些知识

文章目录数电模电逻辑电路与或非异或 门电路与的物理电路边沿触发器功率交流容量直流容量桥电路CHBDABTHD电路器件LM7815与LM7915数电模电 逻辑电路 与或非异或 门电路 与乘大于1或加大于1异或异性为1&#xff0c;异吗&#xff1f; 与的物理电路 当二极管是高电平&#xf…

stm32f407探索者开发板(一)——资源介绍(顺便说下无人机的进度状况)

文章目录零、前言一、前置问题二、注意事项三、学习方法四、外观五、关于sw仿真零、前言 最近虽然在做无人机小项目啦&#xff0c;但是呢由于疫情&#xff0c;各种零件一直没发&#xff0c;很头疼&#xff0c;现在关于遥控器和接收机的选型也没定下来&#xff0c;嗯&#xff0…

【Java】Spring boot快速上手(一):葵花宝典

目录前言学习目标学习内容工具及其环境配置说明新建spring web项目打开idea 新建项目创建项目配置设置静态资源映射编写html访问前端最后前言 该系列文章仅用于个人学习记录&#xff0c;适合入门级&#xff0c;对于文中有错误的地方还望海涵&#xff0c;之前打算结合《瑞吉外卖…

【JavaSE】初识Java

文章目录一. Java语言概述1. Java语言的组成1.1 什么是JavaSE1.2 什么是JavaEE1.3 什么是JavaME2. Java语言的产生3. Java语言的优势二. 初识Java的main方法1. main方法示例2. 运行Java程序一. Java语言概述 Java是一门面向对象编程语言&#xff0c;不仅吸收了C语言的各种优点…