微信小程序-内容检测

Posted 无尘-玩偶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序-内容检测相关的知识,希望对你有一定的参考价值。

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

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

以上是关于微信小程序-内容检测的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序-内容检测

微信小程序-敏感内容检测 文本过滤 图片检测 https

微信小程序-敏感内容检测 文本过滤 图片检测 https

微信小程序视图层WXML_模板

7-微信小程序 模板(template)

vscode 开发微信小程序环境配置