微信小程序-内容检测

一、小程序端实现微信内容检测

1.1、获取access_token

wx.request({
    url: 'https://api.weixin.qq.com/cgi-bin/token',
    method : 'GET',
    data : {
      grant_type: 'client_credential',
      appid: '小程序的appid ',
      secret: '小程序的appsecret '
    },
    success : function(res){
      console.log(res);
      //正常返回结果
      //{"access_token":"ACCESS_TOKEN","expires_in":7200}
    }
  })

1.2、文本内容检测

wx.request({
    url:  'https://api.weixin.qq.com/wxa/msg_sec_checkaccess_token='+access_token,
    method: 'POST',
    data: {
      content: 文本内容
    },
    success: function (res) {
     //当content内含有敏感信息,则返回87014
      if (res.data.errcode !== 87014) {
           // 合格
       }
    }
  })

1.3、图片检测

let tempFilePaths = res.tempFilePaths;
wx.uploadFile({
   url: 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=' + accesstoken,
   method: 'POST',
   filePath: tempFilePaths[i],
   name: 'file',
   header: { 
     'Content-Type': 'application/octet-stream' //一定要设置header头部信息’Content-Type’: ‘application/octet-stream’
   },
   formData: {
     media: tempFilePaths[i]
   },
   success: function(res) {
     if (JSON.parse(res.data).errcode === 87014) {
       uni.showModal({ content: '图片中含有内含有敏感信息,禁止上传', showCancel: false, });
     }
   },
})

二、服务端实现微信内容检测

相信大家会遇到前端由于其他原因不太好实现,需要服务端来实现!接下来直接贴上服务端代码! 

2.1、安装需要的依赖包

npm install needle --save   // 发送请求

 npm install images --save   // 图片处理库

2.2、获取access_token

// 获取token
    static async getToken() {
        const getMsg = await axios.get('https://api.weixin.qq.com/cgi-bin/token', {
            grant_type: 'client_credential',
            appid: '小程序appid',
            secret: '小程序appsecret'
        })
        console.log('获取token', JSON.stringify(getMsg))
        if(getMsg.errcode){
            throw(getMsg.errmsg)
        }
        return {
            access_token: getMsg.access_token,
            expires_in: getMsg.expires_in
        }
    }    

2.3、封装微信内容检测接口

import * as needle from 'needle'
const imagesHandle = require('images')
export default class {
    /**
     * 检测文字内容是否非法
     * @param param.content 文字内容 
     */
    static async msgSecCheck(param: {
        content: string_t
        access_token: string_t
    }) {
        
        try {
            // 调用微信检测违法违规内容接口
            let checkMsg: any = await axios.post(`https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${param.access_token}`, {
                content: param.content
            })
            console.log('调用微信检测违法违规内容接口', JSON.stringify(checkMsg))
            if (checkMsg.errcode == 0 && checkMsg.errmsg == 'ok') {
                return {
                    success: true
                }
            } else {
                return {
                    success: false,
                    errMsg: checkMsg.errMsg
                }
            }
        } catch (e) {
            return {
                success: false,
                errMsg: e
            }
        }
    }

    /**
     * 检测图片内容是否非法
     * @param param.media   图片文件流
     */
    static async imgSecCheck(param: {
        media: any
        access_token: string_t
    }) {
        // let wx = new WxServer.init()

        
        try {
            let content = param.media.split(';base64,')
            let buffer = Buffer.from(content[1] ? content[1] : content[0], 'base64')
            buffer = imagesHandle(buffer).size(100).encode('jpg')
            let checkMsg: any = await this.doHttp(`https://api.weixin.qq.com/wxa/img_sec_check?access_token=${param.access_token}`, {
                media: {
                    content_type: 'application/octet-stream',
                    buffer: buffer
                }
            })
            return checkMsg
        } catch (e) {
            console.log(22222, e)
            throw('错误')
        }
    }

    // 发送请求
    static async doHttp(url, data) {
        return new Promise(async (resolve, reject) => {
            needle.post(url, data, { multipart: true }, function (err, resp, body) {
                if (err) {
                    reject(err);
                }
                resolve(body);

            })
        })
    }

   
}

2.4、封装调用

export default class {
    /**
     * 检测文字内容是否非法
     * @param param.content 文字内容 
     */
    static async msgSecCheck(param: {
        content: string_t
    }) {
        // 获取accessToken 
        let tokenMsg = await $RShareToken.checkToken()
        return await $SContentCheck.msgSecCheck({
            content: param.content,
            access_token: tokenMsg.access_token
        })
    }

      /**
     * 检测图片内容是否非法
     * @param param.media   图片文件流
     */
    static async imgSecCheck(param: {
        media: any
    }) {
         // 获取accessToken 
         let tokenMsg = await $RShareToken.checkToken()
         return await $SContentCheck.imgSecCheck({
            media: param.media,
             access_token: tokenMsg.access_token
         })
    }
}

本文章小程序实现内容检测部分参考 微信小程序-敏感内容检测 文本过滤 图片检测 https

上一篇:前端学习日志0924


下一篇:使用@media (max-width:640px)和@media (min-width: 640px)写适应性网页