历史版本4 :API取数-获取美团企业版数据 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

用户需要将美团企业版的接口数据取出,例如希望将 订单列表查询 中的数据取出,如下图所示:

而「美团企业版」的所有接口调用需要对请求参数进行加密,响应参数进行解密,详情参见:签名实例

1.2 实现思路

  • 准备 accessKey、entId 等,并拼接获取签名参数。

  • 通过调用订单列表接口,使用循环容器获取所有的 sqtBizOrderId;

  • 使用循环容器和 sqtBizOrderId 列表,再次拼接获取签名参数,调用订单列表接口获取全量的订单数据。



1.3 任务展示

2. 操作步骤编辑

2.1 构建认证参数

使用「数据转换」下的 SparkSQL 和 json 生成构建 content 明文。

select UNIX_TIMESTAMP()* 1000 as ts,46574 as entId,1000 as pageSize,${loopTimes} as pageNum

然后使用 JSON生成进行拼接,拼接形式如下图所示:

点击「数据预览」即可看到转化好的 JSON 字符串,如下图所示:

加密获取 content 字段:使用 SparkSQL 进行加密,并构建请求的 body 参数,如下图所示:

select concat('{"accessKey":"E4PBF10P8WLE-TK",','"content":"',content,'"}') as content from (
SELECT replace(base64(aes_encrypt(text, unbase64('VPvrgf6UPufvsarxe94x/g=='),'ECB')),"\r\n","") as content from $[JSON生成]
  )

预览即可看到获取的 content 参数,如下图所示:

将其设置为参数 body 并输出,如下图所示:

2.2 获取 sqtBizOrderId 列表

调用接口获取 sqtBizOrderId 全量数据,以便后续使用其获取全量的订单数据。

2.2.1 调用订单列表接口

使用「数据转换」,连接 2.1 节的节点,如下图所示:

进入数据转换编辑界面,使用 API输入算子,选择请求方式,输入订单列表查询接口,并在 body 中输入 2.1 节输出的构建并输出的参数,如下图所示:

预览即可看到 data 值,即将响应参数JSON序列化后进行加密的结果值,如下图所示:

2.2.2 data 数据解密

美团的解密算法中 base64 需要指定字符集是:alphabet 设置为A-Za-z0-9-_,这块需要自定义加密算法,将下面的 jar 放置到%tomcat%\webapps\webroot\WEB-INF\lib,然后重启 FDL。

secret1.jar

使用 SparkSQL 对 data 进行解密,输入如下 SQL,如下图所示:

select  decode(aes_decrypt(unhex(frombase64(data)), unbase64('VPvrgf6UPufvsarxe94x/g=='),'ECB'),'utf-8') as json from $[API输入]

点击预览即可看到解码后的订单列表数据,如下图所示:


2.2.3 将订单列表中指定数据输出

将解密后的订单列表数据使用 JSON解析算子解析出需要的字段,如下图所示:


预览数据即可看到解析出的数据,如下图所示:


同时将数据输出至数据库中,存储获取的 sqtBizOrderId 等,并将其设置为参数,以便使用循环容器,将其作为获取所有 id 数据的循环条件,如下图所示:

2.2.4 设置循环

由于订单列表的 body 请求 content 是加密过的密文,API 自带的自循环无法实现分页取数,需要使用循环容器的 ${loopTimes} 构建页码,并进行加密,得到 content 实现分页取数。循环容器需要实现循环取数直到接口数据取完。

新建「数据转换」使用  SparkSQL 构建 id 参数,赋值1,让循环容器循环起来,如下图所示:

将 2.1 节和 2.2.1 节设置的数据转换节点拖入至循环容器,同时将 2.2.3 节的初始id 节点与循环容器相连,如下图所示:

设置循环结束条件,循环容器设置按照条件循环,执行条件为:${id}非空