评论

云调用实现内容安全【文本、图片】

使用官方内容安全检测功能,提升小程序安全性。

应用场景:

解决小程序输入内容违规,导致小程序被封风险,或者微信官方检查到小程序未使用安全审核机制,则警告要求使用,否则封禁搜索功能。


核心代码:

云函数端:

const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event) => {
  try {
    let result = '';
    if(event.content){
     result =  await cloud.openapi.security.msgSecCheck({
        content: event.content
      });
    }else if(event.base64){
      result = await cloud.openapi.security.imgSecCheck({
        media: {
          contentType'image/jpeg',
          value: Buffer.from(event.base64, 'base64')
        }
      })
    }
    return {
      result
    }
  } catch (error) {
    return {
      error
    }
  }
}



小程序端:

//文本安全检测
wx.cloud.callFunction({
    name"secCheck",
    data: {
        content"花里胡哨",
    }
}).then((res) => {
    console.log('msgSecCheck =', res)
})


//图片安全检测
wx.chooseImage({
    count"1",
    complete(res) => {
        wx.getFileSystemManager().readFile({
            filePath: res.tempFilePaths[0],
            encoding"base64",
            success(res) => {
                wx.cloud.callFunction({
                    name"secCheck",
                    data: {
                        base64: res.data,
                    }
                }).then((res) => {
                    console.log('imgSecCheck =', res)
                })
            }
        });
    },
})



说明提示:

由于代码片段不支持云开发,故无法放代码片段,使用过程中有什么问题,欢迎讨论。

最后一次编辑于  2020-05-07  
点赞 6
收藏
评论

4 个评论

  • W
    W
    2020-05-21

    这个只能适合单张图片?

    可以不用event.base64,直接用fileid就可以。

    // 云函数入口函数
    exports.main = async (event, context) => {
      const wxContext = cloud.getWXContext()
      console.log("接收参数为:", event)
    
    
      try {
        //文字安全检测
        let msgcheckresult = await cloud.openapi.security.msgSecCheck({
          content: event.msg
        })
        console.log("文字安全检查结果为:", msgcheckresult)
        if (msgcheckresult.errCode == 0) {
          console.log("文字安全检查通过。")
        } else {
          console.log("文字安全检查未通过。")
          return msgcheckresult.errCode
        }
        //图片安全检测
        for (i = 0; i < event.imagefileid.length; i++) {
          console.log("第[",i,"]个图片fileid为:",event.imagefileid[i])
          let imgcheckresult = await cloud.openapi.security.imgSecCheck({
            media: {
              contentType: 'image/jpeg',
              value: Buffer.from(event.imagefileid[i])
            }
          })
          console.log("第[",i,"]个图片安全检查结果为:", imgcheckresult)
          if (imgcheckresult.errCode != 0){
            return imgcheckresult.errCode
          }
        }
        return 0
      } catch (error) {
        return error
      }
    
    
    }
    
    2020-05-21
    赞同 1
    回复
  • 17Read
    17Read
    2020-05-16

    你可以试试这篇文章解决方式:完美解决

    https://mp.weixin.qq.com/s/o77bLIfCEkHq3acmqS4Tyw

    2020-05-16
    赞同
    回复 1
    • lwenm
      lwenm
      2020-10-15
      收费不要发出来 还完美。。。
      2020-10-15
      回复
  • 老张
    老张
    2020-04-18

    真机上,图片有点大的时候,试过了吗?

    我这边是不行的。

    2020-04-18
    赞同
    回复 7
    • 马英臣
      马英臣
      2020-04-28
      图片大的时候需要canvas重绘;我现在重绘又出来个问题....各种坑
      2020-04-28
      回复
    • 老张
      老张
      2020-04-29回复马英臣
      听不懂。我们说的是一回事吗?
      2020-04-29
      回复
    • 马英臣
      马英臣
      2020-04-29回复老张
      图片大的时候安全检查是通过不了的,我现在都是canvas绘制到200*200,然后获取base64数据 再检查图片安全;
      2020-04-29
      回复
    • 发飙的蜗牛
      发飙的蜗牛
      2020-05-14
      图片大的时候用canvas重绘的时候。 注意deswidth就行
      2020-05-14
      回复
    • 17Read
      17Read
      2020-05-16回复马英臣
      你可以试试这篇文章解决方式:完美解决
      https://mp.weixin.qq.com/s/o77bLIfCEkHq3acmqS4Tyw
      2020-05-16
      回复
    查看更多(2)
  • admin
    admin
    2020-04-17

    标记,以后再看

    2020-04-17
    赞同
    回复
登录 后发表内容