反馈已提交

网络繁忙

API取数-SHA2加密身份验证&按页数取数

  • 文档创建者:Roxy
  • 历史版本:22
  • 最近更新:Wendy123456 于 2023-08-28
  • 本文档示例由第六空间家居集团有限公司提供,在此特别鸣谢。

    注:本文方案也适用于美团的开放平台接口。

    1. 概述

    1.1 应用场景

    某企业现在需要将某业务工单数据全部取出以供业务分析使用。

    使用了「沃丰科技」的 Udesk 开发接口 获取工单列表 接口取出所有工单数据,如下图所示:

    而「沃丰科技」的 Udesk 开发接口所有接口调用需要携带签名参数 sign,只有当 sign 值合法时请求才会被接受,因此需要参考 鉴权方式 获取签名参数。

    sign=SHA256(email&open_api_token&timestamp&nonce&sign_version)


    1.2 实现思路

    • 准备 email 、open_api_token、timestamp、nonce、sign_version 数据,并拼接获取签名参数 sign 。

    • 从 获取工单列表 接口中获取总页数 total_pages,将其作为参数,也就是需要执行的次数;

    • 使用循环容器和内置参数 loopTimes,首次执行 page 页码数为 1 ,然后递增执行取出每一页的数据,当循环次数 loopTimes<=total_pages 继续执行,当循环次数 loopTimes>total_pages 时,停止执行。 同时由于所有接口都需要使用动态的签名参数,因此循环容器中也需要增加获取参数签名的步骤。

    1.3 任务展示

    2. 操作步骤

    2.1 获取签名参数 sign

    由于签名 sign 为 email 、open_api_token、timestamp、nonce、sign_version 共同组合生成 sign=SHA256(email&open_api_token&timestamp&nonce&sign_version),所以需要使用 SQL 进行处理。

    • email 为超级管理员的邮箱地址;

    • open_api_token 为API鉴权Token,需要调用 获取鉴权Token接口 获得;

    • timestamp 为Unix time,即从"1970-01-01 00:00:00"至今的秒数;在这里我们使用 SQL 的 now 函数生成

    • nonce 请求的唯一标识,值是由调用者提供的任意字符串,15分钟内此字符串只能被使用一次;在这里我们使用 SQL 的 uuid 函数生成

    • sign_version 为签名算法版本,值固定为 v2。

    2.1.1 生成 nonce 和 timestamp

    新建任务后,新建「数据转换」节点,再数据转换编辑界面新增「DB表输入」,生成时间戳 timestamp,命名为 time_str 以及 nonce ,命名为 uuid_str,如下图所示:

    SQL 语句:

    SELECT
    unix_timestamp(now()) AS time_str,
    uuid() AS uuid_str;

    点击「数据预览」,即可看到生成的 nonce 和 timestamp,如下图所示:

    2.1.2 生成签名 sign 

    使用 SQL 语句拼接生成 sign。

    由于使用的是 SHA2 加密,因此需要使用 SH2函式;同时将 2.1.1 节生成的 time_str 以及 uuid_str 取出,便于后续作为获取工单列表接口的参数使用,如下图所示:

    注:更多加密函数详情参见:Spark SQL 加密函数

    SQL 语句:

    SELECT SHA2(CONCAT("email&open_api_token",time_str,"&",uuid_str,"&v2") ,256) as sign_str,
    time_str,
    uuid_str 
    from Spark SQL1

    点击数据预览即可看到输出的数据,如下图所示:

    2.1.3 将签名设置为参数

    将 2.1.2 节生成的 sign 、 nonce 和 timestamp 作为参数输出,以便后续作为获取工单列表接口的参数使用,如下图所示:

    2.2 获取工单总页码数

    根据 获取工单列表 接口,此处我们将 per_page 设置为 100,也就是每页数据限制为 100 条,然后查看返回值中,每页 100 条数据计算总页数为多少。

    新建「数据转换」节点,如下图所示:

    进入编辑界面后新增「API输入」,写入 API 配置,由于所有的接口都需要使用加密签名,因此按照接口文档,写入email、sign(2.1.3 节输出的参数)、nonce (2.1.3 节输出的参数)、timestamp(2.1.3 节输出的参数),以及 sign_version 值为 v2;

    并设置参数名:per_page,参数值:100,如下图所示:

    点击数据预览,即可看到返回的工单数据,返回示例如下图所示:

    新增「JSON解析」,将需要解析的返回工单 JSON 数据解析为二维表,如下图所示:

    2.3 将总页数设置为参数

    将总页数设置为参数输出,便于后续每页递增执行取数时,到总页数后停止取数。

    2.2 节接口返回值会返回总页数,如下图所示:

    点击「输出参数」,设置参数值为「total_pages」,并将返回的总页数字段取出,在预览界面可以看到总页数,如下图所示:

    2.4 按照页数递增取出所有工单数据

    loopTimes 为循环容器内置参数,容器内当前循环次数,初次为 1 ,后续每次循环递增加。该参数即可实现按照页数递增取出所有的数据。

    新增循环容器节点,并将「数据转换」节点拖入循环容器中,如下图所示:

    由于获取工单列表接口需要使用循环容器进行重复循环执行,同时需要使用加密签名,因此还需要不断获取变化的 sign,需要在「循环容器」的数据转换节点中重复 2.1 节的操作,如下图所示:

    获取加密签名后,即可使用 获取工单列表 在循环容器中取出所有工单数据。

    新增「数据转换」节点,将其拖入「循环容器」中,如下图所示:

    进入数据转换编辑界面,使用 API 输入,参考工单列表接口文档,如下图所示:

    写入 API 配置,并设置参数名:per_page,参数值:100,page 使用内置参数${loopTimes },也就是按照每页 100 条数据,从第一页开始递增从接口取数,同时写入email、sign(2.1.3 节输出的参数)、nonce (2.1.3 节输出的参数)、timestamp(2.1.3 节输出的参数),以及 sign_version 值为 v2,如下图所示

    根据数据需求进行数据解析和处理,如下图所示:

    设置输出数据配置,将数据取出至指定数据库,如下图所示:

    点击循环容器节点,设置循环次数,并设置循环方式为「条件循环」,点击配置条件为 loopTimes<=${total_pages},如下图所示:

    此时即可实现当递增的页数大于总页数时,跳出循环停止执行,从而取出所有的工单数据。

    2.5 效果查看

    保存并运行任务后,此时在数据库中即可出现取出的全部工单数据。

    附件列表


    主题: 数据开发-定时任务
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持