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


    目录

    前言

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

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

    三、整体的业务开发思路

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

    1.订单取消消息的使用

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

    3.具体的订单业务处理

    总结


    前言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    三、整体的业务开发思路


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

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

    1.订单取消消息的使用

    代码如下(示例):

    1. /**
    2. * 接收抖音第三方开发平台推送过来的订单取消消息
    3. * @param httpRequest
    4. * @return
    5. */
    6. @ApiOperation(tags = "TiktokEkOrder", value = "getDoudianEkShopDataPush", httpMethod = "POST",
    7. notes = "接收抖音第三方开发平台推送过来的消息")
    8. @AllowAnonymous
    9. @ResponseBody
    10. @PostMapping(value = "/getDoudianEkShopDataPush")
    11. public DoudianEkPushResult doudianEkShopDataPush(HttpServletRequest httpRequest) {
    12. DoudianEkPushResult result = tiktokEkOrderBiz.doudianEkShopDataPush(httpRequest);
    13. return result;
    14. }

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

    代码如下(示例):

    1. public DoudianEkPushResult doudianEkShopDataPush(HttpServletRequest httpRequest){
    2. DoudianPushResult result = new DoudianPushResult();
    3. String msgId = pushDataTestList.get(0).getMsgId();
    4. try {
    5. DoudianPushMessage pushMessage = DoudianUtils.getPushMessage(httpRequest, APP_SECRET, APP_KEY);
    6. // logger.info("获取到抖音售后订单消息:" + pushMessage);
    7. if (!pushMessage.isSuccess()) {
    8. // logger.error("接收抖音第三方开发平台推送过来的消息 解析推送数据失败");
    9. result.setCode(40041);
    10. result.setMsg("解析推送数据失败");
    11. } else if (DoudianUtils.isEmpty(pushMessage.getData())) {
    12. result.setCode(40041);
    13. result.setMsg("解析推送数据为空");
    14. // logger.error("接收抖音第三方开发平台推送过来的消息 解析推送数据为空");
    15. } else {
    16. logger.info("接收抖音第三方开发平台推送过来的消息 请求体;{}", Jack.toJson(pushMessage.getData()));
    17. //存储消息操作
    18. // TODO 消息
    19. if(pushMessage.getData().get(0).getTag().equals("106")) {
    20. TiktokMsgNotifyBean tiktokMsgNotifyBean = new TiktokMsgNotifyBean();
    21. tiktokMsgNotifyBean.setMsgType("106"); // 取消订单类型消息
    22. tiktokMsgNotifyBean.setMsgContent(pushMessage.getBody()); // 消息体
    23. tiktokMsgNotifyBean.setProcResult("20"); // 待处理状态
    24. Integer a = tiktokMsgNotifyService.save(tiktokMsgNotifyBean);
    25. logger.info("新增了" + a + "条消息");
    26. }
    27. List pushDataList = pushMessage.getData();
    28. // 业务处理
    29. createThead(pushDataList); // java 异步处理
    30. // 接收处理成功
    31. result.setCode(0);
    32. result.setMsg("success");
    33. // logger.info(" 接收抖音第三方开发平台推送过来的消息 接收处理成功");
    34. }
    35. // 回复抖音返回来的推送消息
    36. return result;
    37. } catch (Exception e) {
    38. // 接收处理失败
    39. result.setCode(40044);
    40. result.setMsg("接收处理失败消息");
    41. }
    42. return result;
    43. }

    3.具体的订单业务处理

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

    代码如下(示例):

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


    总结

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

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

  • 相关阅读:
    SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)
    如何使用文件上传实现发布朋友圈?
    在 Python 中实现 DBSCAN
    Transformer合集3
    【蓝桥杯冲击国赛计划第4天】栈
    操作系统不等于 Linux,六问操作系统新时代 | 1024 程序员节
    基于KT6368A的车载OBD蓝牙芯片模块解决方案低成本国产替代
    【博学谷学习记录】超强总结,用心分享|架构师-前置知识-mongodb基本使用
    LeetCode 0216.组合总和 III:回溯(剪枝) OR 二进制枚举
    【LeetCode】73. 矩阵置零
  • 原文地址:https://blog.csdn.net/weixin_46442877/article/details/127574589