
# 创建泛微OA连接器
1. 新建函数getEcoOAToken，函数配置如下： 
   ![](https://support.huaweicloud.com/bestpractice-sparkpack/zh-cn_image_0000001697462214.png)
   函数代码如下：
   ```
   /**
    * 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
   }
   ```
   注意需要引入相关依赖包，其它参数默认值：
   ![](https://support.huaweicloud.com/bestpractice-sparkpack/zh-cn_image_0000001745303617.png)
   
   
2. 新建Ecology-OA连接器，自定义认证函数选择刚创建的getEcoOAToken函数，连接器配置如下： 
   ![](https://support.huaweicloud.com/bestpractice-sparkpack/zh-cn_image_0000001697307274.png)
   
   
 
