# e-code二开请求和拦截说明文档

**支持基线：10.0.2509.01**




## 二开请求


### 二开请求代码示例

```bash
// 请求工具方法
import { devRequest } from '@weapp/ecodesdk';

// 使用方式同 request, 参数保持一致
// get 调用
devRequest({ url: '/papi/secondev/health' }).then(res => {
  if (res.code === 200) {
    Dialog.message({ type: 'info', content: `请求成功：${dayjs().unix()}` })
  } else {
    Dialog.message({ type: 'info', content: `请求失败：${dayjs().unix()}` })
  }
}).catch(err => {
  Dialog.message({ type: 'info', content: `请求异常：${dayjs().unix()}` })
  console.error(`请求异常：${dayjs().unix()}`, err)
})

// post 调用
devRequest({ url: '/papi/secondev/health', method: 'post' }).then(res => {
  if (res.code === 200) {
    Dialog.message({ type: 'info', content: `请求成功：${dayjs().unix()}` })
  } else {
    Dialog.message({ type: 'info', content: `请求失败：${dayjs().unix()}` })
  }
}).catch(err => {
  Dialog.message({ type: 'info', content: `请求异常：${dayjs().unix()}` })
  console.error(`请求异常：${dayjs().unix()}`, err)
})
```

### 二开请求拦截说明

仅二开准入白名单接口可正常请求，如果请求非白名单的接口，会在调用时抛出固定异常

异常示例：
![](${appMdRes}/1756451759-image.png)

特别注意，控制台可能屏蔽异常信息的输出

![](${appMdRes}/1756451789-image.png)

如控制台有上述字样，说明屏蔽输出了，需要url上添加参数wea_link_keep_show_console 才能展示异常信息
如果被拦截的请求也会返回调用方法一个异常响应值，如下

```bash
{
    code: 403
    data: "ecodesdk secondev reuqest access interception: ${请求的url}"
    msg: "ecodesdk secondev reuqest access interception"
}
```

## 二开拦截

二开拦截仅会对准入清单中准入类型为【允许调用和拦截】的接口生效，非清单内的接口或者清单内接口准入类型不是【允许调用和拦截】的不会生效

基于axios.interceptors 封装，拦截器方法入参 同 axios.interceptors原生对象

### 二开拦截代码示例

```bash
// 拦截工具方法
import { regApiInterceptor } from '@weapp/ecodesdk';

// 注册请求拦截器1
regApiInterceptor.regRequestInterceptor('流程-我的请求拦截1', config => {
  console.info('拦截成功1 => ', config);
  // 请求路径增加指定参数
  if (config.url.includes('?')) {
    config.url = config.url + '&params1=xxx'
  } else {
    config.url = config.url + '?params1=xxx'
  }
  return config;
});

// 注册请求拦截器2
regApiInterceptor.regRequestInterceptor('流程-我的请求拦截2', config => {
  console.info('拦截成功2 => ', config);
  // 请求路径增加指定参数
  if (config.url.includes('?')) {
    config.url = config.url + '&params2=xxx'
  } else {
    config.url = config.url + '?params2=xxx'
  }
  return config;
}, 2);

// 注册响应拦截器
regApiInterceptor.regResponseInterceptor('流程-我的请求拦截响应1', resp => {

  // 拦截指定的url
  if (resp.config.url.indexOf('/xxxx') >= 0) {
      // 处理附加逻辑
      console.info('响应拦截成功1 => ', resp);
      return resp;
  }
  return resp;
})
regApiInterceptor.regResponseInterceptor('流程-我的请求拦截响应2', resp => {
  console.info('响应拦截成功2 => ', resp);
  return resp;
}, 2);
```

```bash
regRequestInterceptor(interceptorName: string,  // 拦截器名称，建议有一定语义 便于排查
    doInterceptor: doRequestInterceptor,  // 拦截方法回调
    interceptorWeight: number) // 拦截器 权重，执行顺序 按 从大到小，默认值0
    
regResponseInterceptor(interceptorName: string,  // 拦截器名称，建议有一定语义 便于排查
    doInterceptor: doResponseInterceptor,  // 拦截方法回调
    interceptorWeight: number) // 拦截器 权重，执行顺序 按 从大到小，默认值0
```

**拦截器中修改数据后 需return**


## 准入名单查询

准入名单，可通过主团队 有ecode权限的用户访问 /ecode/monitor/loom/weaHookApi 


- 准入类型：允许调用和拦截	【允许前端调用和拦截】

- 准入类型：允许调用  【允许前端调用不允许拦截】



![](${appMdRes}/1756712708-image.png)


## 准入名单更新

1、请参考[准入清单更新说明](https://weapp.eteams.cn/ecode/playground/doc/share/view/1175504468497195009)文档，将历史准入白名单数据导入到系统中

2、准入白名单数据导入后，e-code监控平台-后端监控-模块二开白名单-准入名单中搜索需要拦截或者调用的接口数据。如果数据可以搜索到，且准入类型也是对的。则说明该接口允许调用或者拦截

3、如果白名单数据导入后，e-code监控平台搜不到数据，则需要联系接口所属模块人员评估接口是否允许调用或者拦截。允许的话，接口所属模块人员需要在自用系统中提交"E10 标准 API 开放二开准入流程"，流程归档后会在流程中生成准入白名单文件。

4、如果模块人员确认已经提交过"E10 标准 API 开放二开准入流程"，则需要将流程中的准入白名单文件提供给二开人员导入即可

## 注意事项

1. 前端不允许调用开放平台接口