text: // 云函数入口文件
  const cloud = require('wx-server-sdk')
  
  cloud.init()
  
  // 云函数入口函数
  exports.main = async (event, context) => {
    console.log(event)
    switch (event.action) {
      case 'requestSubscribeMessage': {
        return requestSubscribeMessage(event)
      }
      case 'sendSubscribeMessage': {
        return sendSubscribeMessage(event)
      }
      case 'getWXACode': {
        return getWXACode(event)
      }
      case 'getOpenData': {
        return getOpenData(event)
      }
      default: {
        return
      }
    }
  }
  
  async function requestSubscribeMessage(event) {
    // 此处为模板 ID，开发者需要到小程序管理后台 - 订阅消息 - 公共模板库中添加模板，
    // 然后在我的模板中找到对应模板的 ID，填入此处
    return '请到管理后台申请模板 ID 然后在此替换' // 如 'N_J6F05_bjhqd6zh2h1LHJ9TAv9IpkCiAJEpSw0PrmQ'
  }
  
  async function sendSubscribeMessage(event) {
    const { OPENID } = cloud.getWXContext()
  
    const { templateId } = event
  
    const sendResult = await cloud.openapi.subscribeMessage.send({
      touser: OPENID,
      templateId,
      miniprogram_state: 'developer',
      page: 'pages/openapi/openapi',
      // 此处字段应修改为所申请模板所要求的字段
      data: {
        thing1: {
          value: '咖啡',
        },
        time3: {
          value: '2020-01-01 00:00',
        },
      }
    })
  
    return sendResult
  }
  
  async function getWXACode(event) {
    // 此处将获取永久有效的小程序码，并将其保存在云文件存储中，最后返回云文件 ID 给前端使用
  
    const wxacodeResult = await cloud.openapi.wxacode.get({
      path: 'pages/openapi/openapi',
    })
  
    const fileExtensionMatches = wxacodeResult.contentType.match(/\/([^/]+)/)
    const fileExtension = (fileExtensionMatches && fileExtensionMatches[1]) || 'jpg'
  
    const uploadResult = await cloud.uploadFile({
      // 云文件路径，此处为演示采用一个固定名称
      cloudPath: `wxacode_default_openapi_page.${fileExtension}`,
      // 要上传的文件内容可直接传入图片 Buffer
      fileContent: wxacodeResult.buffer,
    })
  
    if (!uploadResult.fileID) {
      throw new Error(`upload failed with empty fileID and storage server status code ${uploadResult.statusCode}`)
    }
  
    return uploadResult.fileID
  }
  
  async function getOpenData(event) {
    return cloud.getOpenData({
      list: event.openData.list,
    })
  }
  