微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

这篇具有很好参考价值的文章主要介绍了微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网上关于这个接口大多是介绍,我真正的用在实际环境中还是花了很多功夫在研究出来的,关于这个文章很少,微信论坛问这个的很多,有用的消息零零散散的,最后还是通过我持续不断的看才真正的完成了这个实例,不过前段日子在忙,这个实例写了也有一段时间了,有些细节可能忘记了,但思路应该是没错的,有错误或遗漏喜欢指正。

微信官方文档关于mediaCheckAsync:

security.mediaCheckAsync | 微信开放文档 (qq.com)

一、使用场景

我是在用户发布内容的时候,需要对图片进行检测,因此使用到mediaCheckAsync这个接口,下面代码看不懂跳过就行,反正就是wx.cloud.callFunction({name:'checkImg}),就是调用checkImg云函数判断是否违规

submitForm(e) {
        //....防抖
        //....文字审核
        //内容审核代码开始
        wx.showLoading({
            title: '审核图片中',
        })
        let traceIdArr = []
        for (let i = 0; i < this.data.images.length; i++) {
            const {
                result: {
                    traceId
                }
            } = await wx.cloud.callFunction({
                name: 'checkImg',
                data: {
                    mediaUrl: wx.cloud.CDN({
                        type: 'filePath',
                        filePath: this.data.images[i],
                    })
                }
            })
            traceIdArr.push(traceId)
        }
        wx.hideLoading({
            success: (res) => {},
        })

        //内容审核代码结束
       
        //上传数据
        const {
            _id
        } = await wx.cloud.database().collection("artwork")
            .add({
                data: {
                    comment: [],
                    like: [],
                    content: e.detail.value.content,
                    imageArr: imageContainer,
                    fatherSceneId: this.data.fatherSceneId,
                    openId: openId,
                    time: time
                }
            })
        //把内容审核返回的trace_id和上传集合的id,添加到新的集合trace_id里面
        for (let i = 0; i < traceIdArr.length; i++) {
            await wx.cloud.database().collection('trace_id')
                .add({
                    data: {
                        _id: traceIdArr[i],
                        artwork_id: _id,
                        openId: this.data.openId
                    }
                })
        }

 二、介绍一下mediaCheckAsync

由下图所示:mediaCheckAsync需要这5个参数:

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

1.openId直接在云函数获取

2.mediaType 图片肯定选2

3.version选2,

4.scene我不知道哪个最严,我估计是3吧,我就固定3了

5.mediaUrl需要图片url,用户上传的一般都是临时地址,而mediaUrl传临时地址无效

我翻遍论坛看到有人说用wx.cloud.CDN可以在云函数调用中把临时图片地址转成 HTTP URL路径,函数地址如下:

Cloud | 微信开放文档 (qq.com)

三、云函数

创建一个云函数,我命名叫checkImg

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

然后config.json中配置(有用到msgSecCheck也一起配置了):

{

  "permissions": {

    "openapi": [

      "security.msgSecCheck",

      "security.mediaCheckAsync"

    ]

  }

}

然后直接调用,代码如下:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    console.log(event)
    try {
        return await cloud.openapi.security.mediaCheckAsync({
            mediaUrl: event.mediaUrl,
            mediaType: 2,
            version: 2,
            openid: wxContext.OPENID,
            scene: 3
        })
    } catch (err) {
        return err;
    }
}

然后最关键的地方来了,这个结果是异步的,就意味着几乎不可能光等这个异步消息回来,然后再将函数往下执行,这样子用户发布的体验极差,所以只能等用户发布完,可以开一个待审核区域,然后等数据回来判断是否违规,才能判断是否可以通过,有条件的话可以写个待审核页面,我懒得写,所以后面是懒人写法。

四、接收异步检测结果配置

官网:点击查看消息接收服务器配置”

首先点开云开发置找到消息推送:

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

然后添加消息推送,有三个要选择的

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

消息类型选Event 事件类型选择wxa_media_check(就不求证了,想知道可以看看官网关于消息推送的内容)

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

云函数就是自己新创建一个新的函数、然后选择他

我这里对应创建receiveCheckImg

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

然后点击启用:

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

 五、接收异步检测结果云函数receiveCheckImg

整体函数是这样(如果看不懂,可以看后面的思路)

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    setTimeout(async () => {
        if (event.result.suggest == 'review' || event.result.suggest == 'risky') {

            //通过trace_id拿到哪个类型的集合发来的审核
            const trace = await cloud.database().collection('trace_id')
                .doc(event.trace_id)
                .get()
            //trace拿到就可以删掉了
            cloud.database().collection('trace_id')
                .doc(event.trace_id)
                .remove()

            if (trace.data.artwork_id) {
                //后台删除
            }else if (trace.data.food_id){
                //后台删除
            }else if (trace.data.house_id){
                //后台删除
            }else if (trace.data.shop_id){
                //后台删除
            }

        } else {
            cloud.database().collection('trace_id')
                .doc(event.trace_id)
                .remove()
        }
    }, 35000)

}

微信这个异步接口,官方说是30分钟内会返回结果,有时候又会很快返回,这个不是我们开发者能控制的。

反正就是不能等检测结果回来再上传图片,不然一个发布可能要等30多分钟,所以直接先上传用户的内容,结果回来再判断是否违规。

流程如下:

用户上传图片———点击发布————图片给内容安全检测————用户内容上传到后台————内容安全检测结果回来————如果违规从后台删除用户内容

有条件的可以写一个待审批页面,先上传到待审批页面,结果回来没有违规,再上传到正常浏览页面。

懒人跟着我继续我的骚操作:

我估摸着用户上传图片到后台,再到全部发布完成出现在页面中,大概几秒到半分钟的时间,如果用户还没把全部东西上传到后台,检测结果回来了,我就不能在后台找到这个内容了。

打个比方来说:用户内容需要30秒上传到后台,检测结果15秒钟回来了,检测判断代码找不到用户内容,就删除不了。如果检测结果1分钟才回来,检测判断代码就可以看到后台已经有用户内容了,若违规就可以删除。

我这里是setTimeout等了35秒钟,才发检测申请,这样能大致保证用户上传完之后再被检测判断等操作,这也是微信内容安全检测的弊端,消息回来0-30分钟,不能保证实时检测。

六、异步检测结果

异步检测结果在云函数的日志里看:

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

receiveCheckImg的异步返回结果大致如下:

{
  "CreateTime": 1664629839,
  "Event": "wxa_media_check",
  "FromUserName": "oUaiR5Eq8FW4t4ulYUyis29dbfYU",
  "MsgType": "event",
  "ToUserName": "gh_e950c4848290",
  "appid": "手动屏蔽哈哈哈哈!",
  "detail": [
    {
      "errcode": 0,
      "label": 20002,
      "prob": 90,
      "strategy": "content_model",
      "suggest": "risky"
    }
  ],
  "errcode": 0,
  "errmsg": "ok",
  "result": {
    "label": 20002,
    "suggest": "risky"
  },
  "trace_id": "63383c4b-4a47d694-20726f05",
  "userInfo": {
    "appId": "手动屏蔽哈哈哈哈!",
    "openId": "oUaiR5Eq8FW4t4ulYUyis29dbfYU"
  },
  "version": 2
}

有用的就两个:

一个是trace_id,他是内容审核的唯一标识

一个是result的suggest属性,不用detail是因为,detail会分两种情况,一个是微信那边审核的结果,一个是你自己设置额外屏蔽条件的结果,而result是综合了两个结果得出的值。

result三种结果ok review risky 其中review应该是人工审核,但我懒就都当作违规了。

七、后续违规处理(这个算是附加内容,因为前面已经收到异步消息结果了,怎么处理自行发挥)

处理的关键是:你知道异步消息结果是对应哪个图片的审核吗?

trace_id就是解决这个问题的关键,算是内容审核结果的唯一标识,在异步检测结果中会获得,然后最开始调用 cloud.openapi.security.mediaCheckAsync返回结果也有trace_id

内容审核不是在一个地方用,要对很多集合进行检测,所以trace_id添加到各个集合中,查找起来太麻烦,要遍历所有的集合。

我的解决方式用到的是一个中介集合,新创建了一个集合trace_id

微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)

这个集合的_id就是trace_id

如果内容审核的是关于artwork集合的 就在下面添加artwork_id

如果内容审核的是关于foodArtwork集合的 就在下面添加foodArtwork_id

如果内容审核的是关于houserArtwork集合的 就在下面添加houseArtwork_id

这样子就可以通过这个属性名直接在对应的集合里面寻找对应trace_id的记录了

if (trace.data.artwork_id) {
     //处理artwork集合
}else if (trace.data.food_id){
     //处理food集合
}else if (trace.data.house_id){
    //处理house集合
}else if (trace.data.shop_id){
    //处理shop集合
}

如果不明白的可以看看最开始的代码块的下面这个部分:

 await wx.cloud.database().collection('trace_id')
                .add({
                    data: {
                        //trace_id
                        _id: traceIdArr[i],
                        //xxx集合的检测就设置xxx_id,这样在中介集合标识下可以直接找到对应审核对象
                        artwork_id: _id,
                        openId: this.data.openId
                    }
                })
        }

(当然没有看过我的代码原貌,有点难以理解,不过这个不是重点,利用中介集合这个思路才是后续处理的关键!!)文章来源地址https://www.toymoban.com/news/detail-426293.html

到了这里,关于微信小程序云调用security.mediaCheckAsync接口成功实例(内容安全审核接口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 - 调用后台api接口方法

    2024年01月16日
    浏览(38)
  • 微信小程序接口调用凭证(获取token)auth.getAccessToken接口开发

    小程序接口调用凭证auth.getAccessToken接口规范参考链接 appid :小程序 appId secret :小程序 appSecret grant_type :授权类型,填写 client_credential access_token :获取到的凭证 expires_in :凭证有效时间,单位:秒。目前是7200秒之内的值。 errcode :错误码***(异常情况才会有错误码返回,

    2024年02月15日
    浏览(50)
  • 【自用】微信小程序体验版无法加载数据、无法调用接口

    没有打开微信小程序调试模式 1.进入小程序 点击右上角的3个点儿 2.点击右下角开发调试 3.点击“打开调试” 4.点击“前往体验版”,重新进行测试 5.问题解决(右下角出现角标),重新进行测试吧!

    2024年02月11日
    浏览(31)
  • 微信小程序UV、PV量解释以及接口调用频率

    微信小程序UV、PV量 浏览量(PV): 即通常说的Page View(PV),用户每打开一个网站页面就被记录1次。用户多次打开同一页面,浏览量值累计。 微信小程序中PV是打开小程序的打开次数。 访客数(UV): 一天之内网站的独立访客数(以Cookie为依据),一天内同一访客多次访问网站只计算

    2024年02月16日
    浏览(37)
  • 微信小程序调用科大讯飞 在线合成语音接口(文字转语音)

    科大讯飞在线文档 https://www.xfyun.cn/doc/tts/online_tts/API.html 科大讯飞调用接口 地址 https://blog.csdn.net/jinxi1112/article/details/122835386 微信小程序base64转ArrayBuffer替代方案 https://www.homedt.net/43939.html 注意点 调用函数 参考大佬的实例 这里说一下注意的点 微信小程序 不支持在线的 base64

    2024年02月10日
    浏览(31)
  • 微信小程序——获取接口调用凭据access_token

    今天在搞一个微信小程序的时候,使用到了发布内容的问题,然后想使用微信请求接口,结果遇到了请求接口需要获取调用凭证access_token。 打开微信小程序开发文档后,打开服务端相关文档,如下图: 图中可以看到功能的描述,他是获取全局唯一后台接口调用凭证,有效期

    2024年01月16日
    浏览(50)
  • 微信小程序体验版打开调试模式才能正常调用接口问题

    发布完体验版以后,出现接口调用失败,但是在本地开发环境中可以正常访问的情况,体验版需要打开调试模式才可以正常调用接口,是因为在小程序后台配置中没有在request合法域名中配置接口地址中的域名,如下图配置好即可: 微信小程序本地开发时,可以使用http的域名

    2024年02月12日
    浏览(32)
  • 【需求】微信小程序getAccessToken接口调用过于频繁,导致超过每日限制,不能再次获取

    微信API文档上有讲:①getAccessToken接口生成的access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效②每天有调用次数限制,据说是2000次,具体多少就不知道了。本需求需要保证每天能正常获取和使用getAccessToken。 1.1 联调微信小程序的getA

    2024年02月16日
    浏览(43)
  • 微信小程序实现调用百度文心一言接口API(可直接运行代码)

    直接贴出运行结果 总共有三个步骤,过程都很简单。 先进入文心千帆大模型平台,然后点击左边一列的“应用接入”,然后点创建应用,这时你就获得了API_key了。 如下,开通是免费的,付费随时可以中止。 不过记得要换成自己的API_key和Secret_key。  (如果报错 “链接不在

    2024年02月13日
    浏览(35)
  • 微信小程序-虚拟支付:适用场景 / iPhone调试用支付成功,Android调用失败,提示“小程序支付能力已被限制” / “errMsg“.“requestPayment:fail banned”

    一、官方文档 wx.requestVirtualPayment(Object object) | 微信开放文档 二、微信wx.requestVirtualPayment虚拟支付主要适用于以下场景 1. 虚拟商品购买:如游戏内虚拟道具、游戏点卡、虚拟礼物等,用户可以直接通过微信虚拟支付完成支付。 2. 虚拟货币充值:如游戏币、积分、红包余额等,

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包