实战笔记:uniapp开发小程序云函数
发布于 4 年前 作者 qkang 2931 次浏览 来自 分享

在使用uniapp结合云开发实战过程中踩了不少坑,接下来准备用一个系列来记录这些爬坑过程,方便团队成员学习和日后查找。社区里各位大佬如果有更好的解决方案,希望多多指教,我们是一个追求进步的团队。

项目中我们经常会希望用户上传图片和填写一些文本信息,为了防止部分应用内出现违法违规内容。我们需要对这些内容进行安全检测。微信也很贴心的为我们提供相应的接口。但在uniapp中无法直接调用这些服务,需要稍作改动

1、在项目根目录创建wxcloudfunctions文件夹(可以是任意名字)

2、定义云函数路径 (打开项目根目录下manifest.json)

3、在wxcloudfunctions创建security

新建config.json,index.js, package.json三个文件

config.json配置相应接口权限

{
  "permissions": {
    "openapi": [
      "security.msgSecCheck",
      "security.imgSecCheck"
    ]
  }
}

package.json

{
  "name": "security",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "wx-server-sdk": "~2.3.2"
  }
}

index,js

const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  try {
	let result = {};
	switch (event.action) {
	  case 'msgSecCheck':
		//文本校验
		result = await cloud.openapi.security.msgSecCheck({ content: event.content });
		break;
	   case 'imgSecCheck':
		//图片校验
		result = await cloud.openapi.security.imgSecCheck({
		  media: {
			contentType: 'image/jpg',
			value: Buffer.from(event.content)
		  }
		});
		break;
	   default:
		 result = {
		   code: 403,
		   msg: '非法访问'
		 }
	    break;
	}
    if (result && result.errCode.toString() === '87014') {
      return {
        code: 300,
        msg: '内容含有违法违规内容',
        data: result
      }
    } else {
      return {
        code: 200,
        msg: 'ok',
        data: result
      }
    }
  } catch (err) {
    let logs = {
	event,
	openid: wxContext.OPENID,
	appid: wxContext.APPID,
	unionid: wxContext.UNIONID,
    }
    return {
      code: 400,
      msg: '调用security接口异常',
      log: logs,
      data: err
    }
  }
}

4、使用npm安装copy-webpack-plugin模块

npm install -save copy-webpack-plugin

5、开始编译,编译完成后,前往微信开发者工具

上传并部署,此时就可以测试云函数了

调用示例

let contents = JSON.stringify(content);
wx.cloud.init()
wx.cloud.callFunction({
	name: 'security',
	data: {
	   "action": 'msgSecCheck',
	   "content": contents
	}
}).then(res => {
	if (res.result.code == 300) {
		uni.showModal({
		  title: "温馨提示",
		  content: "你所输入的内容可能含有违法违规内容,不支持进行下一步操作"
	       })		
	} else {
		//写入数据库
	}
})


接口文档

图片检测 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html

【注意:单个 appId 调用上限为 2000 次/分钟,200,000 次/天图片大小限制:1M

文本检测 https://https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html

1 回复
回到顶部