Source: sdk-file/src/wechat/censor.js

const constants = require('core-module/constants')
const HError = require('core-module/HError')
const utils = require('core-module/utils')

module.exports = BaaS => {
  /**
   * 检测违规图片
   * @function
   * @memberof BaaS
   * @param {string} filePath 带检测的图片路径
   * @return {Promise<any>}
   */
  const wxCensorImage = filePath => {
    return BaaS.getAuthToken().then(authToken => {
      return new Promise((resolve, reject) => {
        let header = {
          'Authorization': constants.UPLOAD.HEADER_AUTH_VALUE + authToken,
          'X-Hydrogen-Client-Version': BaaS._config.VERSION,
          'X-Hydrogen-Client-Platform': utils.getSysPlatform(),
          'X-Hydrogen-Client-ID': BaaS._config.CLIENT_ID,
          'User-Agent': constants.UPLOAD.UA,
        }
      
        if (BaaS._config.ENV) {
          header['X-Hydrogen-Env-ID'] = BaaS._config.ENV
        }
        wx.uploadFile({
          url: BaaS._polyfill.getAPIHost() + BaaS._config.API.WECHAT.CENSOR_IMAGE,
          filePath: filePath,
          name: constants.UPLOAD.UPLOAD_FILE_KEY,
          header,
          success: res => {
            let {statusCode, data} = res

            if (parseInt(statusCode) !== constants.STATUS_CODE.SUCCESS) {
              return reject(res)
            }
            resolve(JSON.parse(data))
          },
          fail: () => {
            BaaS.request.wxRequestFail(reject)
          }
        })
      })
    })
  }

  /**
   * 检测违规文本
   * @function
   * @memberof BaaS
   * @param {string} text 带检测的文本内容
   * @return {Promise<any>}
   */
  const wxCensorText = text => {
    if (!text || typeof text !== 'string') {
      return Promise.reject(new HError(605))
    }
    return BaaS._baasRequest({
      url: BaaS._config.API.WECHAT.CENSOR_MSG,
      method: 'POST',
      data: {
        content: text
      }
    })
  }

  /**
   * 异步检测图片、音频
   * @function
   * @since v2.8.0
   * @memberof BaaS
   * @param {string} fileID 文件 ID
   * @return {Promise<BaaS.Response<BaaS.CensorAsyncResult>>}
   */
  const censorAsync = fileId => {
    return BaaS._baasRequest({
      url: BaaS._config.API.WECHAT.CENSOR_ASYNC,
      method: 'POST',
      data: {
        file_id: fileId,
      }
    })
  }

  /**
   * 获取异步检测结果
   * @function
   * @since v2.8.0
   * @memberof BaaS
   * @param {string|number} id 检测记录 ID
   * @return {Promise<BaaS.Response<BaaS.CensorAsyncResult>>}
   */
  const getCensorResult = id => {
    return BaaS._baasRequest({
      url: `${BaaS._config.API.WECHAT.CENSOR_ASYNC}${id}/`,
    })
  }

  BaaS.wxCensorImage = wxCensorImage
  BaaS.wxCensorText = wxCensorText
  BaaS.censorAsync = censorAsync
  BaaS.getCensorResult = getCensorResult
}