微信小程序-内容检测

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

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