ITPub博客

首页 > 应用开发 > IT综合 > 低代码快速对接淘宝订单数据(超详细教程)

低代码快速对接淘宝订单数据(超详细教程)

原创 IT综合 作者:Sen666 时间:2020-12-03 17:11:34 0 删除 编辑

目标:

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

实现环境:

白码低代码平台,通过API 对接功能实现;

前期准备:

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

对接分析:

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

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

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

实现步骤:

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

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

 

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

 

*skuID 是指淘宝上的 skuID

 

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

 

 

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

2.  添加一个淘宝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接口文档 ,同理,填写两个配置参数和输入、输出参数

 

编写代码:

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 即可;

 

 

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

 

 

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

 

 

 

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

 

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

 

 

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

 

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

 

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

 

 

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 获取商品;

 

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

 

 

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

 

 

8.  测试结果:

①客户表

 

②订单表

 

③订单明细表

 

④商品表

 

⑤商品 sku 表

9. 整 体 流程图:

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69981618/viewspace-2739224/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-08-13

  • 博文量
    44
  • 访问量
    23858