社区/学习指南/小程序·云开发高级教程

云调用快速入门

13.1.1 云调用基础

在小程序开发技术文档的服务端接口列表中罗列了所有的服务端接口,如果接口支持云调用,则在接口名称旁会带有云调用的标签。在支持云调用的接口文档中,会分别列出 HTTPS 调用的文档及云调用的文档。

也就是说,服务端接口的开发方式(方法)有两种,一种是 HTTPS 调用,一种是云调用,HTTPS 调用通用于所有的开发语言,是一种比较传统的开发方式;而云调用则是云开发提供的更加方便的开发方式。值得一提的是,我们也可以使用云函数来调用 HTTPS 接口,比如使用 axios,方法在 HTTP 处理章节有介绍。

云调用是云开发提供的基于云函数使用小程序开放接口的能力,支持在云函数调用服务端开放接口。在云函数中使用云调用调用服务端接口无需换取 access_token,只要是在从小程序端触发的云函数中发起的云调用都会经过微信自动鉴权,可以在登记权限后直接调用如发送订阅消息、客服消息等开放接口。

这里需要注意的是,当我们在调试云调用的云函数时,直接使用云端测试会出现报错,这是因为云端测试是无法获取用户登录态信息的,所以建议在小程序端触发来调试。

云调用大大方便了我们使用小程序开放能力的接口,以订阅消息为例,在没有云调用之前,我们想要发送订阅消息,需要以下几个步骤:

  • 在云函数中发送 https 请求,比如前面使用到的 axios;

  • 调用小程序的 auth.getAccessToken 接口,传递 grant_type(值为 client_credential)、小程序 appid 和小程序唯一凭证密钥 secret 来获取小程序全局唯一后台接口调用凭据 AccessToken;access_token 的有效期为 2 个小时,最好要自己存储并定时刷新;

  • 调用小程序的 subscribeMessage.send 接口的 https 请求,来发送订阅消息

而如果是使用云调用则无需换取 access_token,只需要进行如下步骤即可,这些步骤也是通用于其他云调用接口:

  • 在 config.json 文件中配置相关云调用接口的权限;

  • 在云函数中无需发送 https 请求,直接使用 cloud.openapi.subscribeMessage.send 即可

也就是说云开发的云调用能力都是可以通过 HTTPS 调用的方式来实现,但是使用云调用却方便很多。这里需要强调的是,要使用云调用有两个步骤,一是在云函数的配置文件里添加接口权限(方法见下,后面章节也会介绍),二是用云函数来处理。

13.1.2 云函数的配置文件

使用云调用需要配置云调用权限,每个云函数需要声明其会使用到的接口,否则无法调用,声明的方法是在云函数目录下的 config.json 配置文件的permissions.openapi 字段中增加要调用的接口名(对应的接口名,可以去云调用的相关接口的文档里查找),permissions.openapi 是个字符串数组字段,值必须为所需调用的服务端接口名称。

在每次使用微信开发者工具上传云函数时均会根据配置更新权限,该配置有 10 分钟左右的缓存,如果更新后提示没有权限,稍等 10 分钟后再试。

如果你是在微信开发者工具通过“新建 Nodejs 云函数”创建的云函数,云函数的目录里就都会有 config.json 的配置文件,目录结构如下,如果你是通过其他方式创建的云函数,也建议如下 3 个文件都要有(没有的话,可以自己 copy 来创建):


test //云函数目录

├── config.json //权限和定时触发器等的配置文件

├── index.js    //云函数

├── package.json  //云函数的依赖管理

config.json 文件还可以用来配置定时触发器,比如该云函数需要使用到订阅消息和内容安全两个权限,以及每 5 秒钟定时发送一次订阅消息,config.json 的写法如下:


{

  "permissions": {

    "openapi": [

      "subscribeMessage.send",

      "security.imgSecCheck"

    ]

  },

  "triggers": [

    {

      "name": "tomylove",

      "type": "timer",

      "config": "*/5 * * * * * *"

    }

  ]

}

config.json 配置文件的格式和前面介绍的 json 文件配置的格式一样,比如数组最后一项不能有逗号,配置文件里不能有注释等,千万不要写错哦。

13.1.3 拓展能力快速入门

1、拓展能力的说明

拓展能力可以让云开发更方便调用腾讯云的服务,比如图像处理、短信验证、数据库,这些除了会使用到云开发的一些资源外(有免费额度),还会使用到腾讯云的一些服务,因此会产生一些费用(也就是和云开发分开计费),云开发资源的费用可以去云开发控制台查看;而使用腾讯云服务产生的额外费用,可以去腾讯云费用中心查看。

拓展能力还可以更方便使用腾讯云的账号体系实现跨云开发资源、跨多端来调用,以及云开发团队为了方便开发者和运营人员使用而开发的 CMS 内容管理系统等等。和云调用一样,拓展能力也会不断增加一些更好用的功能。尤其是图像处理能力、CMS 内容管理,强烈建议把这两个作为云开发的核心拓展安装一下

2、拓展能力的安装

要安装拓展能力,我们需要登录到腾讯云云开发的网页控制台,登录时一定要选择其他登录方式-微信公众号,然后扫码授权选择关联的小程序账户进行登录。选择云开发环境之后,就可以点击左侧拓展能力的管理菜单,安装拓展能力到指定的云开发环境。

拓展能力的安装,其实就是根据不同的拓展能力所对应的服务执行了以下一些步骤,可以让开发者不必关注腾讯云一些过于复杂的概念或写云函数等:

  • 在腾讯云访问管理添加了一些CAM 角色,以及为这些角色授权了一些策略;不同的拓展能力可能所需要的腾讯云的权限是一样的,所以创建的角色以及角色所需要授权的策略也就相同,建议不要随便删除;

  • 在你指定的云开发环境里新建一些云函数(名称为 tcb_extension_ci 或者以 tcb 开头)、或者在云数据库里创建一些集合(名称也是以 tcb 开头)等;由拓展能力创建的一些云函数、集合,我们是可以修改的,但是它们的名称建议不要修改;

拓展能力可以根据需要安装和卸载,即使安装了只会占据云函数和集合的名额,不使用是不会产生费用的;卸载时也是可以删除这些角色和权限策略的(强烈建议不要删除角色和权限策略)以及相应的云函数和数据库。卸载了还可以再次安装。

注意,拓展能力的角色和权限策略是适用于所有云开发环境,也就是你在一个云开发环境安装拓展能力时创建了角色和指定了权限策略,那在其他云开发环境就不需要再配置了;而云函数和云数据库里的集合,还是需要你通过安装来创建或者自己创建的。

本文出自 李东bbsky