快速对接淘宝订单数据
Sen
• 发表于:2021-02-25 19:09:18 • 更新于:2021-12-03 18:05:37
743

目标:

卖家将淘宝上的订单数据对接到自己的系统内,之后再利用这些数据进行会员管理或产品库存管理。

前期准备:

商家需要先在淘宝开放平台的控制台上申请创建一个应用,获取到应用的appkey和appsecret作为发起API请求的密钥,注意:不同的应用类型可使用的API接口不一样,一定要根据需求选择合适的应用类型,详情可参考官方API文档

对接分析:

根据官方文档,要实现订单数据同步,大致分为两种方式:

1.使用聚石塔云产品将订单数据直接对接到自己的数据库,但需要购买阿里聚石塔的云服务器,实现起来比较麻烦;

2.通过增量修改订单的接口,每天定时拉取当天有更新的订单,这种方式是可以快速实现的,成本也不算高。

实现步骤:

(通过上述的第二种方式实现)

1.创建商品、商品sku、客户(买家)、订单、订单明细数据表商品ID

*商品ID是指在淘宝上的商品ID

创建skuID*skuID是指淘宝上的skuID

创建openid*open_id是指买家在淘宝上的唯一标识

添加原价添加优惠金额

*可根据实际需求,添加原价和优惠金额等属性,这些数据在淘宝的订单中都可以获取到的

2.添加一个淘宝API,用于获取订单数据,填写配置参数(前期准备时已获取),添加两个输入参数:①查询修改开始时间②查询修改结束时间

添加淘宝API

编写代码:

async function run($input, $output, $modules = modules) {

  const taobaoSdk = $modules.taobaoSdk;

 

  let { appKey, appSecret } = $modules.helper.config();

const sdk = new taobaoSdk(appKey, appSecret, {

    endpoint: "https://eco.taobao.com/router/rest"

  });

 let has_next = true;

  let page_no = 1;

  while (has_next) {

    let res = await sdk.execute("taobao.trades.sold.increment.get", {

      session: "6201823bfxxxxxxxxxxxxxxx9ca84c8xxxxxxx8181374",

      fields: "tid,status,payment,orders,pay_time,buyer_nick,buyer_open_id,created",

      start_modified: $input.start_modified,

      end_modified: $input.end_modified,

      page_size: 100,

      page_no,

      use_has_next: true,

    });

    has_next = res.has_next;

    page_no += 1;

    let trade_list = res.trades.trade;

    for (let i = 0; i < trade_list.length; i++) {

      let status_map = {

       "WAIT_BUYER_PAY": "等待买家付款",

        "WAIT_SELLER_SEND_GOODS": "等待卖家发货",

        "SELLER_CONSIGNED_PART": "卖家部分发货",

        "WAIT_BUYER_CONFIRM_GOODS": "等待买家确认发货",

        "TRADE_BUYER_SIGNED": "买家已签收",

        "TRADE_FINISHED": "交易成功",

        "TRADE_CLOSED": "交易关闭",

        "TRADE_CLOSED_BY_TAOBAO": "交易被淘宝关闭",

        "TRADE_NO_CREATE_PAY": "没有创建外部交易(支付宝交易)",

        "WAIT_PRE_AUTH_CONFIRM": "余额宝0元购合约中",

        "PAY_PENDING": "外卡支付付款确认中",

        "ALL_WAIT_PAY": "所有买家未付款的交易",

        "ALL_CLOSED": "所有关闭的交易",

        "PAID_FORBID_CONSIGN": "禁止发货"

      };

//调用功能:新增淘宝订单

      await $modules.program.exec("5fb7b125c3b8f5215662b0ef", {

        "5fb7b12a63c9412159432db5": {

          "field_1605874185141": trade_list[i]["buyer_nick"],//买家昵称

          "field_1605874185391": trade_list[i]["created"].substr(0, 10),//创建日期

          "field_1606099657210": trade_list[i]["created"].substr(11, 5),//创建时间

          "field_1606099671853": trade_list[i]["payment"],//实际付款金额

          "field_1606099671975": trade_list[i]["tid"],//交易编号

          "field_1606099699745": trade_list[i]["orders"]["order"],//订单明细

          "field_1606099716827": status_map[trade_list[i]["status"]]

        }

      });

    }

  }

}

整体思路:

将获取到的订单数据,通过调用功能的方式一一录入到系统中,并且可以去重,新订单直接录入,旧订单则更新状态。

3.再添加一个淘宝API,用于获取订单的买家openid,详情请参考官方API接口文档,同理,填写两个配置参数和输入、输出参数添加淘宝API

编写代码:

async function run($input, $output, $modules = modules) {

  const taobaoSdk = $modules.taobaoSdk;

 

  let { appKey, appSecret } = $modules.helper.config();

 const sdk = new taobaoSdk(appKey, appSecret);

  

  let res = await sdk.execute("taobao.trade.fullinfo.get",{

    session:"6201823bfcxxxxxxxx00598181374",

    fields:"buyer_open_uid",

    tid:$input.tid

  });

  $output.open_uid = res.trade.buyer_open_uid;

}

4.新建一个功能,命名为新增淘宝订单,用于获取订单数据的API调用;

①第一步使用交互输入的步骤,可以理解为这个功能的输入参数;新增淘宝订单功能调用

*参数说明:

buyer_nick:买家昵称

create_date:订单创建日期

create_time:订单创建时间

payment:实际付款金额

tid:交易编号(订单编号)

order_list:订单明细(collectiont类型)

status:订单状态

②第二步使用获取数据的步骤,使用第一步的tid获取到相同编号的订单;

获取数据获取相同编号订单

③第三步使用条件判断的步骤,判断第二步是否获取到订单,以判断该订单编号是新订单还是旧订单;条件判断步骤判断获取订单结果显示是新是旧

④如果判断为假,即为新订单,第四步就使用自定义API的步骤,获取订单买家的openid,使用前面已经做好的获取openid的API即可;获取订单openid判断为假

如果判断为真,即为系统已经录入过的订单,则直接更新订单的数据,第四步就使用关联获取数据的步骤,将第二步获取的订单状态修改为第一步的status参数值;判断为真修改status参数值

⑤在判断为假的路线,第五步使用API的输出参数openid,获取客户,同样使用获取数据的步骤;使用API的输出参数openid获取客户

⑥第六步继续使用条件判断的步骤判断第五步是否获取到客户,原理和第三步一样;判断是否获取客户

⑦如果第六步判断为假,即客户不存在,则第七步就需要新增客户,使用新增数据的步骤,使用第一步的参数和第四步输出的openid进行新增;判断客户获取结果

新增加客户

⑧第八步使用新增数据的步骤,新增订单;新增加订单

其中客户属性需设为上一步新增的客户,其他属性都可以从第一步的参数步骤拿到;客户属性设置为新增

⑨第九步通过编程的方式,使用第一步order_list参数,录入新增订单的明细,这里涉及到商品信息和商品sku的录入,比较复杂,所以我使用了调用功能的方式进行录入,减少出bug的概率;使用order参数录入新增订单

async function runProcess($model = model, $plugin = plugin, $params) {

    //获取参数步骤

    let params = await $model.getValue("5fb7b12a63c9412159432db5");

    let list = params["field_1606099699745"];//order_list参数

    for (let i = 0; i < list.length; i++) {//遍历order_list参数

        let form = {

            "5fbb2bc7c3b8f5215662b1f7": { _id: $params.item._id },//选择订单步骤

            "5fbb2bdc63c9412159432e68": {//参数步骤

                "field_1606101995488": list[i]["num_iid"],//商品id

                "field_1606101996083": list[i]["sku_id"],//skuID

                "field_1606102022493": list[i]["payment"],//实付金额

                "field_1606102036590": list[i]["sku_properties_name"],//sku名称

                "field_1606102311381": list[i]["title"],//交易标题

                "field_1606102446059": list[i]["num"]//购买数量

            }

        };

        //调用功能:新增订单明细

        await $plugin.program.exec("5fbb2bae63c9412159432e64",form);

    }

}

⑩回到第六步,如果判断为真,即客户已存在,则可以直接新增订单和订单明细,原理和⑧、⑨一样;判断步骤的存在判断为真新增

上述功能整理流程图:


5.再新建一个功能,命名为新增订单明细,供上述功能调用;

①第一步使用选择数据的步骤,选择一个订单,作为本功能的输入参数,表示需要新增订单明细的订单;新增订单明细

②第二步使用交互输入的步骤,同理作为本功能的输入参数;使用交互输入

设置为输入参数

③第三步使用获取数据的步骤,使用第二步的商品ID获取商品;获取数据步骤使用id获取商品

④第四步使用条件判断的步骤,判断第三步是否有获取到数据,原理类似新增订单功能的④;判断是否获取数据

如果判断为假,商品不存在,则需要先新增商品(使用第二步的参数进行新增)判断为假新增商品

⑤第五步继续使用条件判断的步骤,判断第二步的sku参数是否为空,因为有些商品是没有sku参数的,只是一个单品;判断sku参数

如果没有sku参数,则可以直接新增订单明细了;sku参数为空

新增订单明细

否则需要先新增sku,再新增订单明细;先增sku后增订单明细

⑥回到第四步,如果判断为真,即商品已经存在了,则不需要新增商品,可以继续执行后面的步骤,判断为真的路线和判断为假的路线区别再是否需要再新增商品;商品存在不需新增

⑦至此功能已做好,上述功能完整流程图:显示完整流程

6.再新建一个功能,用来调用“获取订单数据”的API;新增获取订单数据的API获取订单数据调用功能

7.在系统设置模块,新建一个定时任务,用于定时运行上述功能,周期为每天的00:00;设置模块新建定时任务

测试结果:

①客户表客户表

②订单表订单表

③订单明细表订单明细表

④商品表商品表

⑤商品sku表商品sku表

整体流程图:

整体流程图

本文是否对您有帮助?
有帮助
没帮助
您是否遇到了以下问题?
内容过期或不准确
缺少场景、事例
链接有误
太简单,步骤待完善
其他
提交反馈
如需获取即时帮助,请联系
小助理
微信扫码添加小助理
让你的想法快速变成软件吧~
文章标签
API
联系我们
售前咨询电话
020-88520693
意见箱 · 建议反馈
您的宝贵建议,使白码更完美!
微信扫码添加白码小助理