0%

2023-02-19 如何在 uniCloud 中使用 uni-sec-check 实现微信内容安全检测

2023-02-19 如何在 uniCloud 中使用 uni-sec-check 实现微信内容安全检测

温馨提示:本文使用 New Bing 润色

参考链接:

uniCloud:https://uniapp.dcloud.net.cn/uniCloud/

uni-sec-check:https://ext.dcloud.net.cn/plugin?id=5460

微信内容安全:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/sec-check/msgSecCheck.html

前言

为了让“草梅定时推送”这款应用更加安全可靠,我需要对用户输入的内容进行审核。在网上找了很多方案后,我选择了 uniCloud 的 uni-sec-check 模块。这篇文章将分享我如何使用这个模块,并给出一些实用的技巧。

如何安装 uni-sec-check 模块

要使用 uniCloud 中的内容安全检测功能,我们需要先安装两个模块:uni-open-brigeuni-seck-check。这两个模块都可以通过 HBuilderX 导入插件功能来快速添加到项目中。

1.安装 uni-open-brige 模块

image-20230219171015040

这个模块是用来连接微信开放平台和腾讯云服务的桥梁。我们可以参考官方文档来进行安装。注意,在导入插件时可能会出现文件冲突的提示,请仔细检查并保留已经存在的文件。

2.安装 uni-seck-check 模块

image-20230219164955900

这个模块是用来调用微信内容安全检测接口的工具。我们可以参考官方文档来进行安装。同样,在导入插件时要注意文件冲突问题,并且要在两个配置文件中添加相关信息:

  • uni-config-center/uni-id/config.json
  • uniconfig-center/uni-open-brige/config.json

image-20230219165403006

image-20230219165625223

如何使用 uni-seck-check 模块

在完成了上述两个模块的安装和配置后,我们就可以开始使用内容安全检测功能了。我们只需要在代码中引入 uni-sec-check 模块,并调用其中的方法即可。例如:

image-20230219165757311

但这里有一些小技巧,例如在云函数 URL 化之后,获取不到 APPID 该怎么办?请参考以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'use strict';
const UniSecCheck = require('uni-sec-check')
/**
* 格式化 请求的 event,统一 云函数 和 URL 调用
* @param {*} event
* @param {*} context
*/
function requestDataFormat(event, context) {
if (context.SOURCE === 'http') { // 如果为集成请求
if (event.httpMethod === 'GET') {
return event.queryStringParameters
}
if (event.httpMethod === 'POST') {
let body = event.body
let data = null
if (event.isBase64Encoded) {
body = Buffer.from(body).toString()
}
try {
data = JSON.parse(body)
} catch (e) {
console.error(e)
}
return data
}
return null
}
return event
}

exports.main = async function(event, context) {
const data = requestDataFormat(event, context)

if (!data) {
return {
errCode: 'the-passed-in-parameter-is-null',
errMsg: '传入的参数为空',
}
}
if (!context.APPID) { // 处理 URL 化时没有 APPID 的问题
context.APPID = "__UNI__XXXX"
}
const uniSecCheck = new UniSecCheck({ // 创建内容安全检测模块实例
provider: 'mp-weixin', // 指定所使用服务的提供商,目前仅支持mp-weixin
requestId: context.requestId // 请求Id
})

if(data.type === 'image' || data.image){ // 进行图片检测
const imgSecCheckRes = await uniSecCheck.imgSecCheck({
// image: '',
// openid: '', // 用户的openid
scene: 1, // 场景值
version: 1,
...data
})
console.log(imgSecCheckRes)
return imgSecCheckRes
}

// 进行文本安全检测
const textSecCheckRes = await uniSecCheck.textSecCheck({
// content: '',
// openid: '', // 用户的openid
scene: 1, // 场景值
version: 1,
...data
})
console.log(textSecCheckRes)
return textSecCheckRes
}

在这里,假定提交的数据格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
export interface MsgSecCheckData {
/**
* 检测类型,默认为文本
*/
type?: 'text' | 'image'
/**
* 为文本时必填
*/
content?: string
/**
* 为图片时必填
*/
image?: string
/**
* 用户的openid(用户需在近两小时访问过小程序)version=2时必填
*/
openid?: string
/**
* 场景值(1 资料;2 评论;3 论坛;4 社交日志)
*/
scene?: 1 | 2 | 3 | 4
/**
* 接口版本号 1 或者 2
*/
version?: 1 | 2
}

请自行参考使用~

PS:由于音频检测为 2.0 接口,需要提交 openid,不是很方便,所以未在代码中集成,如有需要可以自行集成。

总结

虽然使用了 uniCloud 的 uni-sec-check 模块进行内容检测,但本质上还是调用了微信的内容安全识别接口。如果你不想依赖 uniCloud ,也可以直接调用微信的接口,效果一样。不过,如果你的应用已经使用了 uniCloud ,那么通过 uni-sec-check 模块会更方便。

本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/3b949dba.html
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!