记录下最近在写小程序遇到的一些问题。
最近在写一个 个人小程序,需要用到云开发的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再调用云函数检测。