likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 12

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

参考链接:

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

uni-sec-check:ext.dcloud.net.cn/plugin?id=5…

微信内容安全:developers.weixin.qq.com/miniprogram…

前言

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

如何安装 uni-sec-check 模块

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

1.安装 uni-open-brige 模块

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

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

2.安装 uni-seck-check 模块

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

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

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

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

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

如何使用 uni-seck-check 模块

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

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

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

'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
}

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

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 模块会更方便。

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

转载自:https://juejin.cn/post/7201752978259345464
评论
请登录