第13章 云调用与拓展能力

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

13.1 云调用基础

13.1.1 云调用基础

在小程序开发技术文档的服务端接口列表中罗列了所有的服务端接口,如果接口支持云调用,则在接口名称旁会带有 云调用 的标签,如果接口支持云调用,也会有专门的支持说明以及相应的使用文档。

云调用在实际使用过程中共有三种不同的场景,分别是:

  • 服务端调用,云调用需要在云函数中通过 wx-server-sdk 使用。在云函数中使用云调用调用服务端接口无需换取 access_token,只要是在从小程序端触发的云函数中发起的云调用都经过微信自动鉴权,可以在登记权限后直接调用如发送模板消息等开放接口。
  • 开放数据调用,云开发可在开放数据接口的返回值中获取到唯一对应敏感开放数据的 cloudID,通过云调用可以直接获取到开放数据
  • 消息推送,主要是客服消息推送

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

  • 在云函数中发送 https 请求,比如前面使用到的request-promise;
  • 调用小程序的 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分钟后再试。 config.json文件还可以用来配置定时触发器,比如该云函数需要使用到订阅消息和内容安全两个权限,以及每5秒钟定时发送一次订阅消息,config.json的写法如下:

{ "permissions": { "openapi": [ "subscribeMessage.send", "security.imgSecCheck" ] }, "triggers": [ { "name": "tomylove", "type": "timer", "config": "*/5 * * * * * *" } ] }

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