nodejs校验小程序敏感内容

2020-03-16 03:02
椰子皮
2530
0
0

使用nodejs校验小程序敏感内容,这里介绍一下,node调用小程序敏感内容校验的api过程中的坑吧

首先找到小程序官方文档

 

node端使用的是request库,虽然已经不维护了。

npm install request --save

 

可以把相关的函数封装一下:

获取accesstoken

 
 const request = require('request')

// 这里是一些配置信息,如appid和scrert
const mp = require('../config/mp')


/**
 *@name 获取小程序accesstoken 
 *@author zzc
 *@date 2020-2-25
 */
const getAccessToken = () => {
  return new Promise((resolve, reject) => {
    const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${mp.mpAppId}&secret=${mp.mpSsecret}`
      request(url, function(error, response, body) {
        if(error) {
          reject(error)
        } else {
          const res = JSON.parse(body)
          resolve(res.access_token)
        }
      })
  })
}

/**
 *@name 小程序图片敏感内容检查 
 *@author zzc
 *@param { String }  access_token access_token
 *@param { FormData }  media 要检测的图片文件,图片尺寸不超过 750px x 1334px
 *@date 2020-2-25
 */
const imgSecCheck = (access_token, media) => {
  return new Promise((resolve, reject) => {
    const url = `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${access_token}`
      request.post({
        url,
        headers: {
          'content-type': 'application/json; charset=utf-8'
        },
        formData: { media },
      }, function(error, response, body) {
        if(error) {
          reject(error)
        } else {
          resolve(body)
        }
      })
  })
}

module.exports = {
  getAccessToken,
  imgSecCheck,
}
 

注意看小程序官方文档

 

这里要求的检测图片是formdata格式,一开始就是不知道formdata到底是什么样的,获取图片我使用了connect-multiparty

ok,接下来写路由接口,我们直接使用fs.createReadStream返回后的值直接传入media。

 

const express = require('express');
const router = express.Router();
const multipart = require('connect-multiparty');
const fs = require('fs')
const mpUtil =  require('../utils/mpUtil')

router.post('/imgCheck', multipart(), async (req, res) => {
  const { files } = req
  const stream = fs.createReadStream(files.file.path)
  const accesstoken = await mpUtil.getAccessToken()
  const checkResult = await mpUtil.imgSecCheck(accesstoken, stream)
  const jsonResult = JSON.parse(checkResult)
  if (jsonResult.errcode !== 0) {
     res.send({
       code: 500,
       errMsg: '存在敏感违规图片!,请删除后重试',
     })
  } else {
    res.send({
      code: 200,
      errMsg: 'ok',
    })
  }
})

 

一开始还去找什么buffer,直接stream传入就ok啦,不过在电脑端调试不太传让太大的图片,会因为文件流内容太长而导致报错,因为没有压缩,手机端会压缩不会存在这个情况。

支付宝微信
0
关注公众号获取更多内容
js获取url参数,非window环境
结合lazyload实现文章页里面的图片预加载
暂无评论,快抢沙发吧
不支持canvas
春季
夏季
秋季
冬季
暗黑
简约
小清新