美文网首页
kettle 获取接口token + 业务接口调用

kettle 获取接口token + 业务接口调用

作者: 一介书生独醉江湖 | 来源:发表于2022-06-08 15:46 被阅读0次
    转换--> 新建一个转换;
    
    一、创建生成记录
    输入--> 生成记录(双击);
    # 限制是运行几次接口,这里是1次;
    # 字段名称自定义即可;
    # api_token : token接口地址;
    # method : POST;
    # Content-Type : application/json;
    # appid 、secret  、timestamp :  这几个参数是我这边token接口里面必须的参数;timestamp是当前时间;(这个没有设值,在后面Java脚本里面取的值)
    # body 是 包含 appid 、secret  、timestamp计算后的值,所以这里也没有设值,在后面Java脚本里面取的值;
    # api_url 是拿到token之后,访问业务接口的地址;
    # 配置好确定即可;
    
    image.png
    二、创建Java代码脚本
    脚本--> Java代码;
    # 双击Main方法(Code Snippits --> Common use --> Main);
    # 会生成方法名为processRow的一段代码,processRow相当于java中的main方法;
    # 可以根据自己需要的逻辑,在这里编写java代码;
    
    image.png
    # **问题点:这里需要点击测试类 , 然后点确定并关闭当前窗口;
    # 重新进入Java代码组件,参数才会显示出来;
    # 否则会有 Kettle java组件getting feilds ...please wait问题;
    
    image.png image.png
    # 这里需要注意,需要引入的跟java代码中一样需要import;
    # 如果使用到了jar包中的类,需要把jar包copy到kettle解压目录/lib中;(这个后面也有说明)
    # 下面是脚本代码示例:
    
    import java.security.MessageDigest;
    
    private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    
    public boolean processRow(StepMetaInterface smi , StepDataInterface sdi) throws KettleException{
        Object[] r = getRow();
    
        if(r == null){
            setOutputDone();
            return false;
        }
    
        if(first){
            first = false;
        }
        Object[] outputRow = createOutputRow(r , data.outputRowMeta.size());
    
        String appid = get(Fields.In , "appid").getString(r);
        String secret = get(Fields.In , "secret").getString(r);
        long timestamp = System.currentTimeMillis();
    
    
        String signStr = "appid=" + appid + "&secret=" + md5(secret) + "&timestamp=" + timestamp;
        String sign = md5(signStr);
    
        String body = "{\"appid\": \"" + appid + "\",\"sign\": \"" + sign + "\",\"timestamp\": "+timestamp+"}";
        get(Fields.Out,"timestamp").setValue(outputRow , timestamp);
        get(Fields.Out,"body").setValue(outputRow , body);
        putRow(data.outputRowMeta , outputRow);
    
        return true;
    }
    public static String md5(String origin) {
        String resultString = null;
        try {
            resultString = origin;
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(resultString.getBytes("UTF-8"));
            resultString = byteArrayToHexString(md.digest());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }
    
    protected static String byteArrayToHexString(byte[] b) {
        StringBuilder resultSb = new StringBuilder();
        for (byte aB : b) {
            resultSb.append(byteToHexString(aB));
        }
        return resultSb.toString();
    }
    
    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n = 256 + n;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }
    
    # 由于我这里Java脚本,需要用到rt.jar包中的MessageDigest.java
    # 所以我这里将rt.jar copy到kettle的解压目录/lib下
    cp /Users/ds/Desktop/rt.jar /Users/ds/Documents/data-integration/lib
    # 保存并关闭当前spoon,重新启动spoon;
    
    三、创建REST client
    查询-->REST client(双击);
    #  这个client是调用token接口的;
    
    image.png
    # api_token_result 实际返回的结果大概是这种数据结构;
    # 所以如果要用,还需要JSON解析,这个后面有说;
    {
        "code":0,
        "message":"",
        "recvTime":1654677126428,
        "respTime":1654677126605,
        "extendData":{
            "appid":"ccb",
            "accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkb2kiLCJPUkd.....",
            "expire":"20220609163206",
            "sign":""
        }
    }
    
    run 运行kettle
    
    image.png
    # 到这里获取token就完毕了,下面是以这个token为参数访问其他接口;
    
    四、JSON解析
    输入--> JSON input
    # 上面提过token接口返回的是一个JSON,需要JSON解析,提取出真正的token;
    
    image.png image.png
    五、创建REST client
    # 这个client是调用业务接口的;
    # Field 是上一步解析的字段名称;
    # Name 是业务接口中的参数名;
    
    image.png
    image.png
    # 最终展示
    
    image.png
    参考:
    https://blog.csdn.net/mapleqn/article/details/119822391
    http://www.kettle.net.cn/2204.html
    https://www.codenong.com/cs106281098/
    https://www.pianshen.com/article/43451323358/
    https://wenku.baidu.com/view/875a9511ed06eff9aef8941ea76e58fafab04592.html
    

    相关文章

      网友评论

          本文标题:kettle 获取接口token + 业务接口调用

          本文链接:https://www.haomeiwen.com/subject/fxhumrtx.html