收藏
回答

涉黄图片提示无违规?security.imgSecCheck 彻底失效?这个Api让我醉了!

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug security.imgSecCheck 工具 latest latest

【你是大佬,点进去看看我的问题吧,你一看就是很会】我在小程序中获取照片并转换Base64(可以通过工具正常转换成选择图片),再提交到云函数,在其中调用:

const result = await cloud.openapi.security.imgSecCheck({
				media: {
					contentType: event.fileName?.toLowerCase().endsWith('.png') ? 'image/png' :
						'image/jpeg',
					value: buffer
				}
			});

权限也声明了:
{
	"permissions": {
		"openapi": [
			"security.imgSecCheck",
			"security.msgSecCheck",
			"security.mediaCheckAsync"
		]
	}
}

但是最终经过重复测试发现无论提交什么图片都返回通过(包括涉黄图,经过测试发现照样返回通过)。

官方文档也没说这个方法被抛弃,说的正常可用。不知道是我的方式错还是咋的。我的云函数是:
const cloud = require('wx-server-sdk');
cloud.init({
	env: cloud.DYNAMIC_CURRENT_ENV
});


exports.main = async (event, context) => {
	try {
		// Check if the file data is provided
		if (!event.file) {
			console.log('No image data received');
			return {
				code: 400,
				msg: '未接收到图片数据'
			};
		}


		// Convert base64 file to buffer
		const buffer = Buffer.from(event.file, 'base64');
		console.log('Buffer length:', buffer
			.length); // Log the buffer length to check if the image data is correctly converted


		// Check if the image data is empty
		if (buffer.length === 0) {
			console.log('Image data is empty');
			return {
				code: 400,
				msg: '图片数据为空'
			};
		}


		// Check file size (limit to 2MB)
		if (buffer.length > 1024 * 1024 * 2) { // 2MB limit
			console.log('Image size exceeds 2MB:', buffer.length); // Log the size of the image
			return {
				code: 400,
				msg: '图片大小超过限制'
			};
		}


		// Perform security check
		try {
			const result = await cloud.openapi.security.imgSecCheck({
				media: {
					contentType: event.fileName?.toLowerCase().endsWith('.png') ? 'image/png' :
						'image/jpeg',
					value: buffer
				}
			});


			// Log the security check response for debugging
			console.log('Security check response:', JSON.stringify(result));


			if (result.errCode === 0) {
				return {
					code: 200,
					msg: '检测通过'
				};
			} else {
				console.log('Security check failed:', result);
				return {
					code: 500,
					msg: '图片检测未通过',
					data: result
				};
			}
		} catch (secError) {
			console.error('Security check error:', secError);


			// Special handling for different error codes
			if (secError.errCode === 87014) {
				console.log('Image content violation detected');
				return {
					code: 500,
					msg: '图片内容违规'
				};
			} else if (secError.errCode === -604102) {
				console.log('Image format error detected');
				return {
					code: 500,
					msg: '图片格式错误'
				};
			}


			console.log('Unknown security check error:', secError);
			return {
				code: 500,
				msg: '图片检测失败',
				data: secError
			};
		}
	} catch (err) {
		console.error('Fatal error:', err);
		return {
			code: 502,
			msg: '系统错误',
			error: err.message
		};
	}
};


我希望使用相关的用户给个反馈,因为比较紧急。


再说一遍:小程序内选完图片后转成的base64内容绝对没有问题,可以正常转换成图片。


最后一次编辑于  12-08
回答关注问题邀请回答
收藏

1 个回答

  • sun
    sun
    发表于小程序端
    12-08

    这个是旧接口已经不维护了,建议切换到新接口,可参考https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/sec-check/mediaCheckAsync.html

    12-08
    有用
    回复
登录 后发表内容