通过白码低代码平台实现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;
测试结果:
①客户表
②订单表
③订单明细表
④商品表
⑤商品sku表