近期微信『 小程序·云开发 』悄悄的上线了一个叫做“云调用”的新功能。

从文档上看,云调用是基于云函数使用小程序开放接口的能力,在云函数中使用云调用来调用服务端接口,无需换取access_token,只要是在从小程序端触发的云函数中发起的云调用都会经过微信自动鉴权,开发流程进一步从而进一步Serverless化。

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/openapi.html

这是一个微信和腾讯云团队在『 小程序·云开发 』解决方案中新打磨的功能点,目的应该是进一步降低开发门槛。

微信小程序云调用上线后带来哪些好处呢,我们结合场景来看下开发流程的变化:

场景:用户提交订单后,通过模板消息触达用户进行提示

云调用支持前后发送模板消息流程对比

  • 开发者服务端调API方式:
  1. 小程序上传用户formId到开发者服务端
  2. 服务端检查access_token是否过期,过期调微信api获取
  3. 服务端用formId调微信api发送模板消息

​​

  • 云调用方式:
  1. 小程序调云函数时传formId, 存数据库
  2. 云函数从数据库中取formId,调发送模板消息的api

​​

模板消息云调用,发送模板消息示例代码如下:

const result = await cloud.openapi.templateMessage.send({
      touser: cloud.getWXContext().OPENID, // 通过getWXContext 获取OPENID
      page: 'index',
      data: {
      },
      templateId: 'TEMPLATE_ID',
      formId: 'FORMID',
      emphasisKeyword: 'keyword1.DATA'
    })

对比云调用支持前后发送模板消息的流程,不经过access_token的校验去调微信api,让开发更省事,假设微信的更多服务端接口均能支持这种方式,那小程序开发就更serverless化了。

场景:用户进入客服界面咨询

有在小程序开发中用过客服消息的同学,一定会对客服消息的云调用能力推崇备至。下面看下云调用支持前后客服消息流程的对比:

  • 开发者服务端接收消息推送方式
  1. 开发者在小程序后台配置服务器URL,Token,消息密钥等
  2. 开发者服务端验证signature后接入会话
  3. 服务端进行消息接收与回复

​​

这个流程偏复杂,用户需要做服务配置, 校验消息有效性,编写业务逻辑回复消息这些操作,其中校验消息(参数排序,加密,signature对比)及消息接收与回复(5s内响应微信服务器,微信服务器重试消息排重,回复消息格式)这些流程中涉及的问题较多,让开发变的更麻烦。

  • 云调用方式
  1. 开发者在云函数中填好消息推送配置
  2. 云函数中取消息内容,调回复接口回复

​​

开发者只需在小程序项目目录下填写配置如下:

{
  "enable": true, // true 时开启云函数消息推送功能
  "callbacks": [ // 所有云函数消息配置
    {
      "msgType": 1, // 消息类型,客服消息为1 
      "functionName": "云函数名", // 接收推送的云函数名称
      "env": "环境ID" // 云函数环境
    }
  ]
}

当在云函数的event参数中取到消息内容后,在云函数中再调用发回复消息的接口(代码如下),即可完成消息接收与回复啦

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

await cloud.openapi.customerServiceMessage.send({
    touser: wxContext.OPENID,
    msgtype: 'text',
    text: {
      content: '收到',
    },
  })

return 'success'
}

客服消息的云调用能力是不是很牛x,再也不用检验signature后才能接入,不用处理重试消息与消息格式的问题,小程序用户以后就会更少的投诉‘客服无法提供服务,请稍后重试’的问题了。

场景: 服务端获取开放数据

在小程序开发过程中,开发者自己的服务端有时也需要获取到小程序的开放数据,下面看看云调用支持前后分别如何获取开放数据:

  • 开发者服务端校验解密方式
  1. 获取session_key放服务端
  2. 服务端signature校验
  3. 获取明文内容、敏感数据解密

​​

如果有办法能让开发者不用再去面对获取开放数据时,进行校验和解密的工作,那就太爽了。而云调用能力恰好解决了这个问题。

  • 云调用方式
  1. 小程序调开放能力接口获取明文数据与敏感数据的cloudID
  2. 小程序调云函数传cloudID, 云函数event中取cloudID对应的敏感数据

​​

你只需要将敏感数据的 cloudId 传给云函数,它就能取到对应的敏感数据,校验解密这些工作再也不会让人烦恼了。

其他的云调用开放能力如获取留存,获取小程序码,校验图片或文本内安全这些能力也都很有用,想想以前检查用户图片是否非法的流程,用户需要先将文件上传到服务端,服务端再调微信校验接口检查,现在可以直接调云函数就可以完成检查。其他的云调用能力如下:

​​

总结:通过云开发的云调用能力,可以让开发者在简单的场景下使用云函数就能完成开发工作,但是一些重要的场景如微信支付,并没有相关的开放能力,如果未来能用云函数来代替开发者的商户系统与微信服务交互,完成小程序支付功能的开发,那就更厉害了。所以希望未来能有更多,更重要的能力开放,使开发进一步Serverless化。

小程序开发探秘:『 小程序·云开发 』新功能“云调用”上手体验相关推荐

  1. AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 wps office, excel ppt

    AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 office   更多主页   下载地址   ​​​​​​​ 能在以及几乎所有支持websock浏览器,包括chro ...

  2. @程序员:Python 3.8正式发布,重要新功能都在这里

    整理 | Jane.夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]最新版本的Python发布了!今年夏天,Python 3.8发布beta版本,但在2019年10月14日,第一个 ...

  3. 阿里云 MaxCompute 2018-09 新功能发布

    2018年9月大数据计算服务 MaxCompute 又发布新功能啦! [新功能]MaxCompute窗口函数支持WINDOW_CLAUSE 参考文档 适用客户 数据开发人员在进行数据开发过程中,用到调 ...

  4. 嵌入式UI开发必备组件——Qt系列全新升级,更多新功能等你来体验

    Developer Machines公司是一家专门为程序员开发高效的.快速可靠的工具和类库的公司.其主要为开源UI开发框架QT提供商业组件,包括Chart.DataGrid.Ribbon控件.日前Qt ...

  5. 新浪云存储 php,新浪云存储SCS | API文档

    概述 新浪云存储服务主要提供以下三类API: Service操作 Bucket操作 Object操作 与此同时,为提高用户使用的安全性,新浪云存储服务还通过使用签名来验证请求者的身份. 如需了解签名算 ...

  6. 程序员必备!CSDN 公众号新功能上线!现在体验有惊喜!

    文末抽大奖 用CSDN网站搜索资源是不是不过瘾? 这次CSDN公众号又给大家带来新惊喜了,究竟是什么 别急慢慢看~ 最近程序猿们纷纷感慨: "我去,这也太方便了吧!" " ...

  7. 博图程序需要手动同步_西门子博图v15新功能-工程组态选件

    PLCSIM Advanced在循环 OB(如循环中断 OB)的过程映像分区上实现 PLCSIM Advanced 与协同仿真工具的同步. 支持非循环服务 (RDREC/WRREC) 和中断(如硬件中 ...

  8. 在报表开发工具Stimulsoft Report数据透视表的新功能介绍

    在本文中,我们将向您介绍自 Stimulsoft Ultimate 2022.3 版本以来可用的数据透视表元素功能. Stimulsoft Ultimate官方正版下载 使用此仪表板元素,您可以通过匹 ...

  9. 微信小程序云开发快速入门手册-告别切图仔的时刻到了

    文章很长,建议先收藏,有充分的时间再学习,没有小程序基础的,也阔以先收藏哦.   本文章会手把手带各位小伙伴入门微信小程序云开发,因为我还不是全栈工程师,所以不是特别清楚前后端分离模式下,后端工程师需 ...

最新文章

  1. 注册asp.net 4.0 到iis
  2. boost::container实现多态双端队列的测试程序
  3. java 会话共享_java – servlet如何工作?实例化,会话,共享变量和多线程
  4. python关键词提取_python对文件中的关键词查找替换,实现自动获取配置
  5. Docker 基本操作
  6. 两种添加数据到DropDownList 控件的方法
  7. 2019年系统分析师和系统架构师考试经验
  8. ISIS 7 Professional运行报错解决方案
  9. 电影《功夫熊猫3》中的管理知识
  10. PSM+DID 效果评估python demo 、线性分类模型+双重差分法
  11. HTML-CSS-JS实现卫龙辣条旗舰店网页
  12. 相遇在世界尽头与冷酷仙境
  13. HighCharts图标中隐藏x/y轴坐标
  14. Django - 应用及分布式路由
  15. Android手机拍照功能的实现
  16. 怎么看计算机配置好不好,电脑参数怎么看
  17. 初试Android原生弹窗
  18. java里SQL insert操作的语法_Java含个人总结语法:JDBC,学生表,实体类,集合,增删改查,注入,预处理【诗书画唱】...
  19. 车牌检测(分别使用Haar级联 和轮廓裁剪)
  20. 备案注销申请表_怎么注销单个网站备案?

热门文章

  1. 报纸的配送方式:订阅发布模式
  2. 作业Week9、10+月模拟题3、4+CSP3、4+限时大模拟10、14
  3. 用纯Java代码根据IP获取windows和linux的MAC物理地址
  4. 5个免费、高质量PPT素材网站
  5. 重庆矢崎仪表有限公司携手BlackBerry面向中国市场研发多款安全数字液晶仪表盘
  6. mysql聚合函数伪列_Oracle函数学习应用总结
  7. 建模竞赛省奖论文完整版+代码附录支撑材料
  8. TUM RGBD数据集工具及使用
  9. 基于STM32单片机的K型热电偶测温(Proteus仿真+程序)
  10. macbook控制已经运行的Chrome浏览器