适用于SDK版本从 2.3.0 开始以及后续版本号不带-pro 的版本
## 接入步骤

### 引入/安装js SDK

#### Web

建议直接通过 `script `引入, 将放在初始化代码之前

```html
<script src="./YiDunProtector-Web.js"></script>
```

#### uni-app（H5）

```js
import createNEGuardian from  './YiDunProtector-Web.js'
```

### 初始化SDK
执行SDK初始化。

```js
const neg = createNEGuardian({ productId: '<PRODUCT_ID>', timeout: 6000 }, function (code, msg) {

})
```

其中：

`productId` 是应用标识，对应易盾控制台中的产品编号，YD开头

`timeout` 数据上报超时时间，单位 ms，默认 `6000`

`callback` 异步流程回调。

| code | msg | 说明|
|------|-----|-----|
| 200  | Success   |流程内token获取成功|
| 109  | Init Repeat   |重复初始化 |
| 199  | ProductId invalid   |产品ID错误|

注：不可用的productId会导致服务端鉴权接口失败，请确保productId是正常可用的。

### 私有化初始化SDK
执行SDK初始化。

```js
const neg = createNEGuardian({ productId: '<PRODUCT_ID>', apiServer:'https://xxxxx.xxxx.xxxx', timeout: 6000 }, function (code, msg) {

})
```

其中：

`productId` 是应用标识，对应易盾控制台中的产品编号，YD开头

`apiServer` 私有化服务器地址，私有化的客户需要通过该接口设置服务器地址，其他客户可以忽略

`timeout` 数据上报超时时间，单位 ms，默认 `6000`

`callback` 异步流程回调。

| code | msg | 说明|
|------|-----|-----|
| 200  | Success   |流程内token获取成功|
| 109  | Init Repeat   |重复初始化 |
| 199  | ProductId invalid   |产品ID错误|

注：不可用的productId会导致服务端鉴权接口失败，请确保productId是正常可用的。

### 同步获取 Token

```js
const {code, token} = neg.getToken()
```

| code | token说明                                                                      |
|------|------------------------------------------------------------------------------|
| 200  | 正常模式，数据正常上报到设备指纹服务端，token 长度固定|
| 201  | 离线模式，数据上报过程中出现异常，比如网络抖动/超时等，token 长度不固定                 |
| 202  | 当前获取过程异常，此时 token 为空字符串                                                      |

缓存 token 在缓存时长内二次加密后立即返回；无缓存或缓存已过期时返回降级 token，效果与短 token 一致，正常送检即可。并同时触发后台异步刷新。

注意：此时 token 可能因为初始化回调未完成而导致错误码202，为保证 token 完整获取，请保证同步获取的时候初始化回调是完成状态。

### 异步获取 Token

```js
neg.getTokenAsync().then(result => {
  if (result.code === 200) { // 正常情况
    alert('get token:', result.token)
  }
  if (result.code === 201) { // 离线模式
    alert('get token:', result.token)
  }
})
```

每次实时采集数据并上报，完成后返回最新 token，属于耗时操作。

getTokenAsync 返回有两种模式：
- 正常模式，数据正常上报到设备指纹服务端，token 长度固定
- 离线模式，数据上报过程中出现异常，比如网络抖动/超时等，token 长度不固定，效果与短 token 一致，正常送检即可

### 校验结果
前端获取到 `token` 后，将 `token` 上传到业务服务器。
业务服务器根据 `token` 向智能风控服务器发起校验，查询结果
更多接入细节见智能风控服务端接入文档。

### 协议保护
通过数据签名与数据加密/数据解密，防止通信数据被分析，被篡改，被攻击，保护应用/游戏的通信安全。
对应的`irisk_bg.wasm`文件，请联系易盾获取详细说明文档。

#### 协议模块集成
获取协议文件irisk_bg.wasm与智能风控文件YiDunProtector-Web.js。

##### 协议集成代码
node环境下，执行以下内容。

```js
const fs = require('fs');

// irisk_bg.wasm文件的绝对路径
const wasm_path = 'irisk_bg.wasm';
// 智能风控文件的绝对路径
const web_sdk_path = 'YiDunProtector-Web.js';
const contents = fs.readFileSync(wasm_path, null);
const base64Encoded = Buffer.from((contents)).toString('base64');
const web_sdk_param = fs.readFileSync(web_sdk_path, null);
fs.writeFileSync(web_sdk_path, web_sdk_param.toString().replace('\'AGFzbQEAAAABfhFgAABgAX8AYAF\'',
  '\'' + base64Encoded + '\''));
console.log("替换成功")
```

#### 数据签名
验证数据来源和完整性。

```js
neg.htpSign('<alg>','<version>','<data>')
  .then(result => {
    console.log(result)
  })
```

其中：

`alg` 签名算法。具体值请联系易盾获取详细说明文档。格式为number

`version` 算法版本。具体值请联系易盾获取详细说明文档。格式为number

`data` 签名的数据。格式为string

#### 数据加密
保护数据内容的机密性。

```js
neg.safeCommToServer('<alg>','<version>','<data>')
  .then(result => {
    if (result.code === 200) { // 正常情况
      alert('enc:', result.data)
    } else { // 异常情况
      alert('当前浏览器版本较低')
    }
  })
```

其中：

`alg` 签名算法。具体值请联系易盾获取详细说明文档。格式为number

`version` 算法版本。具体值请联系易盾获取详细说明文档。格式为number

`data` 加密的数据。格式为string

#### 数据解密
保护数据内容的机密性。

```js
neg.safeCommFromServer('<alg>','<data>')
  .then(result => {
    if (result.code === 200) { // 正常情况
      alert('dec:', result.data)
    } else { // 异常情况
      alert('当前浏览器版本较低')
    }
  })
```

其中：

`alg` 签名算法。具体值请联系易盾获取详细说明文档。格式为number

`data` 解密的数据。格式为string