nodejs + axios 调用微信 img_sec_check 接口

一、用这个方法获取 access_token

// 取得微信接口的 access_token
const wxGetAccessToken = async () => {
  const accessToken = await axios.get(
    `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`
  )
  return accessToken.data.access_token
}

二、用这个方法调用 img_sec_check 接口

// 微信图片审核
const wxImgCheck = async (accessToken, file) => {
  const FormData = require('form-data')
  const fs = require('fs')
  const url = `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${accessToken}`
  const stream = fs.createReadStream(file.path)

  const form = new FormData() // 构建表单
  form.append('media', stream) // 添加文件

  // 构建请求头 
  // 不这样做的话无法调用接口
  // 来源:https://cnodejs.org/topic/57e17beac4ae8ff239776de5
  const getHeaders = form => {
    return new Promise((resolve, reject) => {
      form.getLength((err, length) => {
        if (err) { reject(err) }
        const headers = Object.assign({ 'Content-Length': length }, form.getHeaders())
        resolve(headers)
      })
    })
  }

  const headers = await getHeaders(form)
  const res = await axios.post(url, form, { headers })
  return res.data.errcode
}

三、使用

const file = ctx.request.files.file
const accessToken = await wxGetAccessToken()
const errcode = await wxImgCheck(accessToken, file)
if (errcode === 0) {
  // 调用成功
} else {
  // 调用失败
}

 

你可能感兴趣的:(nodejs + axios 调用微信 img_sec_check 接口)