# 通过 API 导入业务数据

## 接口授权的获取

登录到 Elven 系统，在需要使用 API 接入业务数据的 Entity 中，进入 Journals 页面，点击 Journals 页面右上角的 Integrations

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2FubXRXx0lx6gbYXfrRoO7%2Fimage.png?alt=media&#x26;token=5881cfde-edf4-4fad-9175-cb8b39e43eb3" alt=""><figcaption></figcaption></figure>

在弹出的 Integrations 管理窗口中，点击 Add new integration 按钮

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2FXf0YVvA2RahEND1cARoQ%2Fimage.png?alt=media&#x26;token=0b186eb8-e780-4743-bf2b-251633657c40" alt="" width="563"><figcaption></figcaption></figure>

为新的数据类型进行命名，然后点击 Add 按钮

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2Fj00rPwkKEwyGIWNf8fmG%2Fimage.png?alt=media&#x26;token=be75c18c-194a-46a4-aa9c-2f83b54860f3" alt="" width="563"><figcaption></figcaption></figure>

当完成了数据类型的添加之后，就可以添加新数据了。点击 Add data 按钮，在下拉菜单中选择“OpenAPI Integration”

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2FUSfZffaDZBHgtcbgRfEx%2Fimage.png?alt=media&#x26;token=7d1c1a32-3a07-4e07-9d42-02adaf20ea1b" alt="" width="563"><figcaption></figcaption></figure>

在弹出的 API Key/Secret 管理窗口中，点击 Create 按钮

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2FTBcyWUJPN1gZWsNuCMZ4%2Fimage.png?alt=media&#x26;token=ec22a427-e4d2-4ad2-b44e-a6ac173f0d9d" alt="" width="563"><figcaption></figcaption></figure>

在下一个窗口中，为新创建的 API Key 命名

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2F79fYLWqN0havhPaLblmw%2Fimage.png?alt=media&#x26;token=4d846c03-ffa1-4bb6-bc0b-16dfd4d21f70" alt="" width="563"><figcaption></figcaption></figure>

点击 Create 按钮，完成新 API Key 的创建。

您可以点击每一个 Key/Secret 后面的复制图标，将 Key/Secret 的内容复制到剪贴板中进行使用。

<figure><img src="https://3644585726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fgq0d5M2WNXGfXUM1gfsx%2Fuploads%2FAbTkPhL3DAj1jZ25rLHD%2Fimage.png?alt=media&#x26;token=7422cc44-885b-4481-8cc6-6a8f08dd12ce" alt=""><figcaption></figcaption></figure>

## 接口授权的使用

在请求头中提供以下参数

```javascript
elven-api-key  获取到的授权 apiKey
elven-api-sign  base64格式的签名, 例如 LVT5aXA9064gpgZrPXPLJB/Aq9r45yMF10sTZQTteyE=
elven-api-timestamp 以毫秒格式的时间戳, 例如 1721209655047，过期时间是30秒
```

其他sign的算法如下, 把 时间戳, 请求方式, 请求路由拼在一起, 使用secret进行 HMAC SHA256的加密

```javascript
// crypto 采用了 https://github.com/nodejs/node/blob/v16.9.0/lib/crypto.js 库
  /**
   * 生成签名
   * apiSecret: BjGiqCWfHGCrl065dlEBWFO5vLj7Hqiexxx,
   * timestamp: 1721205912758
   * method POST
   *  path  /open/v3/businessData
   */
  buildSign(apiSecret: string, timestamp: number, method: string, path: string) {
    const str = `${timestamp}${method}${path}`
    return crypto.createHmac('sha256', apiSecret).update(str).digest('base64')
  }

```

示例效果

```javascript
[
  'D7JLJ3awwrTdNXtSrPI1GlYE', // key
  'BjGiqCWfHGCrl065dlEBWFO5vLj7Hqie', // secret
  'POST', // method 一定是大写的
  '/open/v3/businessData' // 不能带域名, 只能以 '/' 开始的的path部分
]
{
  'elven-api-key': 'D7JLJ3awwrTdNXtSrPI1GlYE',
  'elven-api-sign': 'LVT5aXA9064gpgZrPXPLJB/Aq9r45yMF10sTZQTteyE=',
  'elven-api-timestamp': 1721209655047
}
```

## 上传业务数据

```javascript
POST https://openapi.elven.com/open/v3/businessData

header
{
  elven-api-key: aaaa
  elven-api-sign: bbbbbbbbbbbb
  elven-api-timestamp: 22222222
}

body
{
       businessDataTypeName: 'Settlement', // 已经在产品中创建好了
       businessDataSourceName: 'Settlement-2024-07',// 没创建或者已创建的openapi类型的
       businessDataList: [
               {"a": 100, "b": "buy", "c": "2024-07-01 22:33:44"},
               {"a": 100, "b": "sell", "c": "2024-07-01 23:33:44"},
               {"a": 100, "b": "buy", "c": "2024-07-02 06:33:44"},
       ]
}
```
