小程序共享环境调用资源方云函数openapi

记录下最近在写小程序遇到的一些问题。

最近在写一个 个人小程序,需要用到云开发的2个openapi接口['security.msgSecCheck-v1','security.imgSecCheck']

分别是文字与图片的违规信息检测,这2个接口只能通过云函数内调用,但是又不想再花19.9开个环境,刚好云开发可以环境共享,被共享方可以调用资源方的云资源:数据库,云储存,云函数;

废话不多说,怎么共享环境的操作就略过了,直接开始调用资源方的云函数

注意:共享环境调用云函数必须在资源方小程序开发工具上才能创建,被共享方cloudfunctions会提示未选择环境忽略即可

在资源方上创建一个云函数调用openapi检测文字与图片

const opt = {}
//云函数入口
exports.main = async (event) => {
  const wxc = cloud.getWXContext()
  //获取环境或共享环境的访问端小程序appid,共享环境调用云函数必须加这个才能调用成功
  opt.appid = wxc.FROM_APPID || wxc.APPID
  //函数入口
  const {func} = event; //方法名
  let res;
  if (func === 'security.msgSecCheck') {
    //文本敏感词验证  errCode != 0 则有违规内容
   return await msgSecCheck(event)
  }else if  (func === 'security.imgSecCheck') {
      //图片敏感验证  errCode != 0 则有违规内容
    return await imgSecCheck(event)
  }
  return res;
}
//图片验证
async function imgSecCheck(event) {
  try {
    let res = await cloud.downloadFile({
      fileID: event.fileID,
    })
    console.log(res,'downloadFile')
    return await cloud.openapi(opt).security.imgSecCheck({
      media: {
        contentType: "image/png",
        value: res.fileContent
      }
    })
  }
  catch (err) {
      return err
  }
}
//文字验证
async function msgSecCheck(event) {
  const {content}=event;
  try {
    return await cloud.openapi(opt).security.msgSecCheck({
      content: content
    })
  }
  catch (err) {
      return err
  }
}

再将云函数上传部署即可。

接下来更换到被共享方的小程序调用

跨环境共享资源案例官方文档里有,但是微信的文档哪个不是写的生怕别人看的懂。

官方文档里有一段话:

cloudbase_auth 云函数
在使用共享环境之前,需要保证资源方拥有 cloudbase_auth 云函数,
用于鉴权调用方的身份并制定相关权限。

在调用方 cloud.init() 的过程中,会首先执行这个函数,
如果这个函数不存在,会提示找不到对应的FunctionName。

请务必参考示例在资源方添加此函数。

需要再资源方添加一个cloudbase_auth 云函数用来鉴权,但是我没有这个函数也能调用成功

小程序共享云环境所有操作都是通过实例一个new wx.cloud.Cloud()对象调用

async onLoad(options) {
  /**注册共享云环境 */
  that.data.share_cloud=new wx.cloud.Cloud({
    resourceAppid:app.globalData.resourceAppid,//资源方appid
    resourceEnv:app.globalData.resourceEnv //云环境名称
  })
  //注意:必须要等init完成,不然会报错,所以这里用了个异步等待
  await that.data.share_cloud.init()
},
  /**文字风险检测 */
call_security(share_cloud){
    return new Promise((resolve, reject) => {
      share_cloud.callFunction({
        name: "dreamDrawing_Functions",
        data: {
            func:'security.msgSecCheck',
            content:_Text
        },
        success: function(res) {
          resolve(res)
        },
        fail: function(err) {
          reject(err)
        }
      })
    })
  }

在需要的地方调用call_security方法

      that.call_security(share_cloud).then(res => {
        if(res.result&&res.result.errCode!=0){
            that.setData({loading_text:'输入文字违规,请重新输入',msgerror_btn:true})
        }else{
         
        }

返回成功,图片检测方法一样,只是需要先上传到云储存拿到fileID再调用云函数检测。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值