更新时间:2023-11-02 GMT+08:00
分享

创建泛微OA连接器

  1. 新建函数getEcoOAToken,函数配置如下:

    函数代码如下:

    /**
     * common是平台提供的公共函数,包括方法有post和get请求
     *
     * const common = require("./common.js");
     * const headers = {};
     * const body = "";
     * 示例1:异步调用
     * common.httpRequest("http://localhost:8080/test", headers, body, "POST").then((data) => {
     *      if(data.code < 300){
     *         return data.body;
     *      }
     *      return {};
     * });
     *
     * 示例2:同步调用
     * const data = await common.httpRequest("http://localhost:8080/test", headers, body, "POST");
     * if(data.code < 300){
     *     return data.body;
     * }
     * return {};
     * 接口返回 data = {
     *                "headers": {},
     *               "body": string,
     *               "code": number,
     *               "error": string
     *               }
     */
    /**
     *
     * mssiAuthData参数样例
     * {
     *      "header":{}, // 连接器认证header参数
     *      "path": {}, // 连接器认证path参数
     *      "query":{}, // 连接器认证query参数
     *      "body":{}, // 连接器认证body参数
     *      "host":"https://demo.com // API主机地址
     * }
     *
     */
    const encryptpwd = require('node-jsencrypt')
    const axios = require('axios')
    function extractEventData(event, name) {
        let data = event[name]
        if (event.isBase64Encoded && data) {
            data = new Buffer(data, 'base64').toString()
        }
        return data ? JSON.parse(data) : {}
    }
    function getReqInfo(inputData, authData){
        let appid = inputData["appid"]
        let secret = inputData["secret"]
        let spk = inputData["spk"]
        let url = inputData["url"]
        let time = inputData["time"]
        let ct = new encryptpwd()
        ct.setPublicKey(spk)
        cry_secret = ct.encrypt(secret)
        let req_body = {
            "appid": appid,
            "secret": cry_secret,
            "time": time
        }
        // let req_url = authData["host"] + url
        let req_url = "http://110.41.7.110:6060" + url
        
        return {
            "req_url": req_url,
            "req_body": req_body
        }
    }
    // 发送请求获取token
    async function getToken(mssiAuthData, inputData){
        let reqInfo = getReqInfo(inputData, mssiAuthData)
        let url = reqInfo["req_url"]
        let body = reqInfo["req_body"]
        let res = {}
        
        res = await axios.post(
            url,
            {},
            {"headers": {
                "appid": body["appid"],
                "secret": body["secret"]
            }}
        )
        
        
        return res.data
    }
    /**
     * 函数是方法的入口
     * @param {*} event  执行事件(event), 包含用户定义的函数参数以及所选择的的连接器认证相关参数
     * @param {*} context  Runtime提供的函数执行上下文
     * @returns
     */
    exports.handler = async function (event, context) {
        const inputData = extractEventData(event, 'body') // 用户定义的函数参数数据
        const mssiAuthData = extractEventData(event, 'mssiAuthData') // 连接器认证数据
        mssiAuthData.securityToken = context.getToken()
        const dataExtendConfig = extractEventData(event, 'dataExtendConfig')  // 流步骤扩展参数
        
        let result =  await getToken(mssiAuthData, inputData);
        return result
    }

    注意需要引入相关依赖包,其它参数默认值:

  2. 新建Ecology-OA连接器,自定义认证函数选择刚创建的getEcoOAToken函数,连接器配置如下:

相关文档