微信小程序-云开发云调用API没有权限(no permission)问题

时间:2024-04-09 12:32:35

今天在学习微信小程序云开发中的在云函数中使用云调用api templateMessage.send 时,在开发环境中运行报错:function has no permission to call this API
如下图:
微信小程序-云开发云调用API没有权限(no permission)问题
查找总结原因大概有两点:

  1. 云函数所在目录缺少个权限声明文件
    config.json
{
  "permissions": {
    "openapi": ["templateMessage.send"]
  }
}
  1. 将微信开发工具升级到 v1.02.1904090 版本以上后,重新上传部署云函数

解决如上两个问题后,运行正确
微信小程序-云开发云调用API没有权限(no permission)问题

另外

在这过程中遇到另外一个问题,在云函数中调用 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
如下图:
微信小程序-云开发云调用API没有权限(no permission)问题

经查找原因为:
在开发工具中支行时, e.detail.formId 的值为 the formId is a mock one
这个值需要在真机调试中才会正常出现,点击真机调试,并在手机上再次点击这个功能按钮,果然打印了正常的 formId。使用开发工具中的"真机调试"运行成功。