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":"E4P1BF10P8TYS-TK",','"content":"',content,'"}') as content from (
SELECT replace(base64(aes_encrypt(text, unbase64('VPvrgf293fyPufvsarxe9x/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。
使用 SparkSQL 对 data 进行解密,输入如下 SQL,如下图所示:
select decode(aes_decrypt(unhex(frombase64(data)), unbase64('VPvrgfreaaPufvsarxe74x/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}非空,如下图所示:
2.2.5 运行任务
运行任务,将订单id写入数据库表。
2.3 遍历订单id调用接口获取全量数据
将 2.2 节写入数据库的订单id取出,如下图所示:
设置其为参数,如下图所示:
新增循环容器节点,遍历订单id,如下图所示:
新建数据转换节点,再次构建签名认证,查看订单列表查询,需要使用 SparkSQL 构建 content 加密前数据结构,如下图所示:
语法:
select UNIX_TIMESTAMP()* 1000 as ts,46574 as entId,${sqtBizOrderId} as sqtBizOrderId
使用 JSON生成算子生成 JSON 格式的 content,如下图所示:
使用加密函数进行加密,构建 body 请求体,如下图所示:
select concat('{"accessKey":"E4si950P8WLE-TK",','"content":"',content,'"}') as content from (
SELECT replace(base64(aes_encrypt(text, unbase64('VPvrg9485UPufvsarxe94x/g=='),'ECB')),"\r\n","") as content from $[JSON生成]
)
将加密后的密文进行参数输出,如下图所示:
再拖入一个数据转换节点到循环容器中,和上一个数据转换节点连接,然后进入数据转换编辑界面,使用API输入算子,如下图所示:
将取出的订单数据进行解密,使用 SparkSQL 函数进行解密,解密后得到明文的 JSON 数据,如下图所示:
|
解析 JSON,将需要的订单详情字段进行DB表输出,如下图所示:
设置 DB 输出,如下图所示:
2.4 运行任务
运行任务将订单详情进行入库,如下图所示: