今天在学习微信小程序云开发中的在云函数中使用云调用api templateMessage.send
时,在开发环境中运行报错:function has no permission to call this API
如下图:
查找总结原因大概有两点:
- 云函数所在目录缺少个权限声明文件
config.json
{
"permissions": {
"openapi": ["templateMessage.send"]
}
}
- 将微信开发工具升级到 v1.02.1904090 版本以上后,重新上传部署云函数
解决如上两个问题后,运行正确
另外
在这过程中遇到另外一个问题,在云函数中调用 templateMessage.send
时,
云函数如下:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
let formId = event.formId;
const result = await cloud.openapi.templateMessage.send({
touser: cloud.getWXContext().OPENID, // 通过 getWXContext 获取 OPENID
page: 'index',
data: {
keyword1: {
value: '氢能总部'
},
keyword2: {
value: '小明'
},
keyword3: {
value: '18:00'
},
keyword4: {
value: '云浮思劳氢能小镇'
}
},
templateId: 'MYlxdani6r7yU0ldtZqadxxxxxxxxxxxxx',
formId: formId,
emphasisKeyword: 'keyword1.DATA'
})
// result 结构
// { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }
return result
} catch (err) {
// 错误处理
// err.errCode !== 0
throw err
}
}
在开发工具中报错:openapi.templateMessage.send:fail invalid form id hint
如下图:
经查找原因为:
在开发工具中支行时, e.detail.formId
的值为 the formId is a mock one
这个值需要在真机调试中才会正常出现,点击真机调试,并在手机上再次点击这个功能按钮,果然打印了正常的 formId。使用开发工具中的"真机调试"运行成功。