微信小程序-雲開發雲調用API沒有權限(no permission)問題

今天在學習微信小程序雲開發中的在雲函數中使用雲調用api templateMessage.send 時,在開發環境中運行報錯:function has no permission to call this API
如下圖:

查找總結原因大概有兩點:

  1. 雲函數所在目錄缺少個權限聲明文件
    config.json
{
  "permissions": {
    "openapi": ["templateMessage.send"]
  }
}
  1. 將微信開發工具升級到 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。使用開發工具中的"真機調試"運行成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章