一、用这个方法获取 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 {
// 调用失败
}