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