今天在學習微信小程序雲開發中的在雲函數中使用雲調用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。使用開發工具中的"真機調試"運行成功。