写在开头
以前可以用微信小程序实现免费的文本安全检测,不过去年开始微信小程序的文本检测接口就改了,需要传入用户的openid才可以使用。想要做文本安全检测变得有点麻烦。
在大佬的分享下,发现QQ小程序的接口可以免费使用,不需要用户的openid也可以使用。于是便花了一点点时间写了一个专门的接口去检测文本安全。
1、新建一个云函数并替换下方代码
云函数命名:如msg_sec_byqq
代码:
import cloud from '@lafjs/cloud'
export async function main(ctx: FunctionContext) {
const message = ctx.body.message
if(!message){
return {
code : -1,
msg : "请传入文本后再尝试"
}
}
const access_token = await getCachedQqAccessToken()
const api_url = `https://api.q.qq.com/api/json/security/MsgSecCheck?access_token=${access_token}`
const res = await cloud.fetch.post(`${api_url}`,{
appid: cloud.env.QQ_APPID,
content: message
})
return res.data
}
async function getQqAccessToken() {
let token_url = `https://api.q.qq.com/api/getToken?grant_type=client_credential&appid=${cloud.env.QQ_APPID}&secret=${cloud.env.QQ_APPSECRET}`;
let accessToken = (await cloud.fetch(token_url)).data
if(accessToken.errcode == 0){
delete accessToken.errcode
accessToken.expires_in = 7000000 + new Date().getTime()
return accessToken
}
}
async function getCachedQqAccessToken() {
let QQ_access_token = await cloud.shared.get("QQ_access_token")
if(!QQ_access_token){
let access_token = await getQqAccessToken();
console.log(access_token)
await cloud.shared.set("QQ_access_token",access_token)
return access_token.access_token
}else{
let {
expires_in,
access_token
} = QQ_access_token;
const nowTime = new Date().getTime()
if (nowTime >= expires_in) {
let access_token = await getQqAccessToken();
await cloud.shared.set("QQ_access_token",access_token)
return access_token.access_token
} else {
return access_token
}
}
}
记得点击发布云函数才会生效哦!
2、新建环境变量
获取QQ小程序的Appid和AppSecret
在https://q.qq.com/ 随便注册一个小程序,不需要发布
新建环境变量
NAME分别为:QQ_APPID
和 QQ_APPSECRET
,填入之前保存的Appid和AppSecret,点击更新重启应用
3、测试接口
返回值 errCode 为0,则代表文本内容安全,返回值 errCode 为87014则代表文本内容违规。
参考文档:https://q.qq.com/wiki/develop/miniprogram/server/open_port/port_safe.html#security-msgseccheck
4、接口调用
Laf其他云函数内部调用
const res = await cloud.invoke("msg_sec_byqq",{
body:{
message : "法轮功"
}
});
console.log(res.data)
外部调用
以在线Post为例 随便找的在线Post网站 http://coolaf.com/
外部调用可直接用Post请求实现,下面是Axios的请求示例
const axios = require('axios');
const message = "法轮功"
axios.post('https://<你的Laf应用ID>.laf.dev/msg_sec_byqq', {
data: {
message: message,
}
})
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.log(error);
});