一、小程序端实现微信内容检测
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