触发器实战教程

触发器介绍

我们打开应用的引擎模块,默认就进入到了触发器模块,在这个页面我们可以很方便进行的查询、编辑,禁用等操作。触发器

触发器相关文档请移步这里

触发类型:数据表

下面我们先以数据表作为触发条件,方便大家实操。触发类型:数据表

邮件模板

准备工作

我们先在数据页面,创建一个product表,然后添加如下一个字段:

字段名称类型
namestring

创建触发器

我们新建一个触发类型为数据表的触发器,条件卡片的配置如下:

名称内容
数据表product
事件类型create
满足条件任一
条件一name = "我的第一件商品"

接下来我们编辑邮件内容:

名称内容
收件人test-trigger@ifanr.com
邮件标题您的商品被创建啦
邮件内容商品被创建啦

邮件动作填写完成后如下图:邮件动作

测试触发器

编辑动作完成后点击保存后,我们切换到数据表模块,创建一条数据,name 字段为"我的第一件商品",如下图:测试触发器

保存后,检查邮箱,发现收到知晓云发来的邮件了测试结果

微信模板消息

准备工作

  • 了解 BaaS JS SDK 的使用方法。
  • 绑定小程序。去应用设置页面绑定小程序,如果已经绑定可以忽略此步。
  • 获取 appSecret。
  • 在小程序后台选择微信消息模板。
  • 准备一个小程序用于测试。如果忘记了 appSecret,可以先去微信小程序后台,重置后即可获取 appSecret,如下图:配置 appSecret配置模板消息列表如下图:模板消息列表

创建触发器

我们重新创建一个触发器,这次动作类型选择微信,这时候会出现一个弹窗,要求我们输入小程序的 appSecret,如下图:创建触发器

配置 appSecret 完毕后,进入编辑动作页面,填写参数,如下图:创建触发器

编写小程序代码

保存后,我们打开微信开发者工具,新建一个小程序项目,开始编写小程序代码。第一步:在 app.js 引入 BaaS JS SDK,SDK 文档请参考这里编写小程序代码

第二步:在index.wxml中添加一个form组件,注意这里form组件需要添加 report-submit属性,否则在回调事件对象中无法获取formId。编写小程序代码

发送模板消息必须提前提交 formId

第三步:在index.js文件中添加addProduct回调,保存数据行,同时提交formId。编写小程序代码

最后一步,预览小程序,然后点击添加商品,不一会就可以收到微信模板消息了。编写小程序代码

WebHook

准备工作

搭建一个 HTTP 服务器用于接收 POST 请求。这里以 Node.js 为例,写一个简单的 demo:

  • 准备一台具有公网 IP 的服务器。
  • 安装 Node.js 环境。
  • 在当前目录下新建 index.js,并将下方代码块内容粘贴至index.js。然后执行npm i koa jsonwebtoken,安装依赖包。
  1. // index.js
  2. const Koa = require('koa')
  3. const jwt = require('jsonwebtoken')
  4. const app = new Koa()
  5. /**
  6. * 解析 POST BODY
  7. * @param ctx
  8. * @returns {Promise<any>}
  9. */
  10. function parsePostData(ctx) {
  11. return new Promise((resolve, reject) => {
  12. try {
  13. let postdata = ''
  14. ctx.req.addListener('data', (data) => {
  15. postdata += data
  16. })
  17. ctx.req.addListener('end', function() {
  18. let parseData = postdata
  19. resolve(parseData)
  20. })
  21. } catch (err) {
  22. reject(err)
  23. }
  24. })
  25. }
  26. /**
  27. * 解析 JWT 数据
  28. * @param str
  29. * @param secret
  30. * @returns {Promise<any>}
  31. */
  32. function decodeJWT(str, secret) {
  33. return new Promise(function(resolve, reject) {
  34. if (secret) {
  35. jwt.verify(str, secret, (err, decoded) => {
  36. if (err) return reject(err)
  37. resolve(decoded)
  38. })
  39. } else {
  40. resolve(Buffer.from(str.split('.')[1], 'base64').toString())
  41. }
  42. })
  43. }
  44. app.use(async (ctx, next) => {
  45. let postData = await parsePostData(ctx)
  46. let data = await decodeJWT(postData, ctx.query.jwt)
  47. console.log(ctx.header)
  48. console.log(data)
  49. ctx.body = 'ok'
  50. })
  51. app.listen(8088, () => {
  52. console.log('running...')
  53. })

执行node index.js,启动 HTTP 服务。

创建触发器

我们新建一个触发类型为数据表的触发器,条件卡片的配置如下

名称内容
数据表product
事件类型create
满足条件任一
条件一name = 1

我们以数据表product为例,在触发器中添加一个 WebHook 动作。添加动作

URL 格式如下

  1. http://<your ip>:<port>/?jwt=<JWT KEY>

示例

  1. http://192.168.11.11:8088/?jwt=mehXaWyZXhnzsyWYeUPhWTCOgfjGgdwN

测试触发器

我们在 product 表中创建一行 name 字段为 1 的记录,然后在我们搭建的 HTTP 服务器查看输出结果,可以看到我们成功收到了 POST 请求:触发器执行成功

这里为了方便演示,将 JWT KEY 放入了query string 中,生产环境不推荐这么操作。

数据表操作

准备工作

  • 新建两张数据表:A 表,B 表。A 表用于激活触发器,然后将结果写入 B 表。
  • 在 A 表新建一个名称为 name,类型为 string 的字段;在 B 表新建一个名称为 result ,类型为 string 的字段。

创建触发器

我们创建一个触发类型为数据表的触发器。条件卡片如下:

名称内容
数据表A
事件类型create
满足条件任一
条件一name != 1

接着我们添加一个数据表操作的动作

名称内容
动作类型数据表操作
频率可重复触发
数据表B
操作创建
操作1result =

创建触发器创建触发器

这里我们使用了模板变量,result = 的意思是将数据表 A 中 name 字段赋值给数据表 A 的 result 字段。

测试触发器

我们在数据表 A 中创建一行 name = test123 的记录。测试触发器添加成功后,检查数据表 B,发现触发器成功地为我们添加了一行记录测试触发器

云函数

创建云函数

我们先创建一个云函数,如下图所示:创建云函数

代码如下:

  1. exports.main = function functionName(event, callback) {
  2. console.log(event.data)
  3. callback(null, "hello world")
  4. }
创建触发器

我们创建一个触发器,如下图所示创建触发器

测试触发器

我们在数据表 A 新增一条 name='123' 的记录,稍等几秒后,我们查看下 firstFunction 的任务日志查看日志

可以看到我们的云函数被成功执行了,event.data 的内容为数据表记录查看日志

触发类型:微信支付回调

准备工作

  1. App({
  2. onLaunch: function () {
  3. require('./vendor/sdk-v3.7.0.js')
  4. let clientID = '[[client_id]]'
  5. wx.BaaS.init(clientID)
  6. wx.BaaS.login()
  7. }
  8. })
  9.  

我们在首页增加一个按钮,在按钮上绑定 click 回调,在回调函数中使用 wx.BaaS.pay 来发起支付请求

  1. Page({
  2. pay: function () {
  3. let params = {
  4. totalCost: 0.1,
  5. merchandiseDescription: '一条支付描述'
  6. }
  7. wx.BaaS.pay(params).then(res => {
  8. console.log('pay')
  9. }, err => {
  10. // 未完成用户授权或发生网络异常等
  11. console.log(err)
  12. })
  13. }
  14. })

支付成功结果:支付成功结果支付成功结果

下载完整 demo

下文创建的触发器都是以微信支付回调作为触发类型,相关描述将会被省略

邮件-支付回调

动作创建参照上文创建邮件小节,只是这里我们把邮件相关参数改成如下:

名称内容
邮件标题用户支付成功
邮件内容用户支付了元, 订单号:

这里我们使用了 `` 模板变量,用于拿到用户支付的具体金额。

随后我们测试微信支付,支付成功后,查看收件箱,如图:邮件-支付回调

微信模板消息-支付回调

动作创建参照上文创建微信模板消息小节。只是这里我们把参数 keyword1 改为 {{total_cost}},这样就可以拿到用户支付的具体金额。

微信模板消息-支付回调微信模板消息-支付回调

发送模板消息必须提前提交 formId

WebHook-支付回调

动作创建参照上文创建 WebHook 小节。唯一要注意的是,请求 Body 参数会不同。

数据表操作-支付回调

动作创建参照上文创建数据表操作小节。注意这里可选的模板变量有所不同

云函数-支付回调

创建云函数

我们创建一个云函数 verifyPayment,函数内容如下

  1. exports.main = function functionName(event, callback) {
  2. console.log(event.data)
  3. callback(null, '')
  4. }

触发云函数

支付成功后,我们查看 verifyPayment 的任务日志如下:云函数-支付回调

触发类型:定时任务

准备工作

我们首先创建一个云函数,如下图所示:触发器实战教程 - 图28

创建触发器

我们创建一个触发类型为定时任务的触发器,触发周期为每小时,动作内容选择我们上面创建的云函数。

触发器实战教程 - 图29触发器实战教程 - 图30触发器实战教程 - 图31

测试触发器

过几个小时后,我们查看云函数的任务日志,可以看到云函数被成功执行了触发器实战教程 - 图32

触发类型:文件操作

准备工作

我们首先创建一个云函数,如下图所示:触发器实战教程 - 图33

创建触发器

我们创建一个触发类型为文件操作的触发器,触发条件为上传文件且上传成功,动作内容选择我们上面创建的云函数。

触发器实战教程 - 图34触发器实战教程 - 图35触发器实战教程 - 图36

测试触发器

我们在控制台中上传一个文件:

触发器实战教程 - 图37

文件上传操作相关文档请移步这里

之后,我们查看云函数的任务日志,可以看到云函数被成功执行了触发器实战教程 - 图38

触发类型:IncomingWebhook

准备工作

我们首先创建一个云函数,如下图所示:触发器实战教程 - 图39

创建触发器

我们创建一个触发类型为IncomingWebhook的触发器,动作内容选择我们上面创建的云函数。

触发器实战教程 - 图40触发器实战教程 - 图41触发器实战教程 - 图42

测试触发器

在创建好触发器之后,在这里会有一个特定的 URL:触发器实战教程 - 图43

点击复制,然后在新浏览器窗口访问这个 URL:触发器实战教程 - 图44

上面返回了 status: 'ok'; 说明执行成功了。我们查看云函数的任务日志,如下:触发器实战教程 - 图45

触发类型:微信消息推送

准备工作

我们首先创建一个云函数,如下图所示:触发器实战教程 - 图46

创建触发器

我们创建一个触发类型为微信消息推送的触发器,填入小程序或公众号的 AppID,具体参数值请参考微信文档,动作内容选择我们上面创建的云函数。

触发器实战教程 - 图47触发器实战教程 - 图48触发器实战教程 - 图49

测试触发器

我们在小程序页面中添加进入客服消息按钮

  1. <button plain open-type="contact"></button>

在小程序页面中点击按钮进入客服会话,并发送文字消息:

触发器实战教程 - 图50

之后,我们查看云函数的任务日志,可以看到云函数被成功执行了:触发器实战教程 - 图51

触发类型:支付宝支付回调

准备工作

创建触发器

我们创建一个触发类型为支付宝支付回调的触发器,触发条件为支付成功,触发动作下文只讨论支付宝模板消息动作类型,其他动作类型请参考上文微信支付回调。

触发器实战教程 - 图52

发送模板消息必须提前提交 formId

测试触发器

我们新建一个小程序,在小程序入口加载 BaaS JS SDK,请求用户授权:代码如下

  1. App({
  2. onLaunch: function () {
  3. require('./vendor/sdk-v3.7.0.js')
  4. let clientID = '[[client_id]]'
  5. my.BaaS.init(clientID)
  6. my.BaaS.login()
  7. }
  8. })
  9.  

我们在首页增加一个按钮,在按钮上绑定 click 回调,在回调函数中使用 my.BaaS.pay 来发起支付请求

  1. Page({
  2. pay: function () {
  3. let params = {
  4. totalCost: 0.01,
  5. merchandiseDescription: '一条支付描述'
  6. }
  7. my.BaaS.pay(params).then(res => {
  8. console.log('pay')
  9. }, err => {
  10. // 未完成用户授权或发生网络异常等
  11. console.log(err)
  12. })
  13. }
  14. })

支付成功结果:

支付成功结果支付成功结果

检查触发器日志,调用触发器成功,并成功发送模板消息:

支付宝支付回调支付宝支付回调