触发器实战教程

触发器介绍

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

触发类型:数据表

邮件模板

准备工作

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

字段名称类型

name

string

创建触发器

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

名称内容

数据表

product

事件类型

create

满足条件

任一

条件一

name = "我的第一件商品"

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

名称内容

收件人

test-trigger@ifanr.com

邮件标题

您的商品被创建啦

邮件内容

商品{{name}}被创建啦

测试触发器

微信模板消息

准备工作

  1. 了解 BaaS JS SDK 的使用方法。

  2. 绑定小程序。去应用设置页面绑定小程序,如果已经绑定可以忽略此步。

  3. 获取 appSecret。

  4. 在小程序后台选择微信消息模板。

  5. 准备一个小程序用于测试。

创建触发器

编写小程序代码

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

WebHook

准备工作

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

  1. 准备一台具有公网 IP 的服务器。

  2. 安装 Node.js 环境。

  3. 在当前目录下新建 index.js,并将下方代码块内容粘贴至index.js。然后执行npm i koa jsonwebtoken,安装依赖包。

// index.js
const Koa = require('koa')
const jwt = require('jsonwebtoken')
const app = new Koa()

/**
 * 解析 POST BODY
 * @param ctx
 * @returns {Promise<any>}
 */
function parsePostData(ctx) {
  return new Promise((resolve, reject) => {
    try {
      let postdata = ''
      ctx.req.addListener('data', (data) => {
        postdata += data
      })
      ctx.req.addListener('end', function() {
        let parseData = postdata
        resolve(parseData)
      })
    } catch (err) {
      reject(err)
    }
  })
}

/**
 * 解析 JWT 数据
 * @param str
 * @param secret
 * @returns {Promise<any>}
 */
function decodeJWT(str, secret) {
  return new Promise(function(resolve, reject) {
    if (secret) {
      jwt.verify(str, secret, (err, decoded) => {
        if (err) return reject(err)
        resolve(decoded)
      })
    } else {
      resolve(Buffer.from(str.split('.')[1], 'base64').toString())
    }
  })
}

app.use(async (ctx, next) => {
  let postData = await parsePostData(ctx)
  let data = await decodeJWT(postData, ctx.query.jwt)
  console.log(ctx.header)
  console.log(data)
  ctx.body = 'ok'
})

app.listen(8088, () => {
  console.log('running...')
})

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

创建触发器

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

名称内容

数据表

product

事件类型

create

满足条件

任一

条件一

name = 1

URL 格式如下

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

示例

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

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

数据表操作

准备工作

  1. 新建两张数据表:A 表,B 表。A 表用于激活触发器,然后将结果写入 B 表。

  2. 在 A 表新建一个名称为 name,类型为 string 的字段;在 B 表新建一个名称为 result ,类型为 string 的字段。

创建触发器

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

名称内容

数据表

A

事件类型

create

满足条件

任一

条件一

name != 1

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

名称内容

动作类型

数据表操作

频率

可重复触发

数据表

B

操作

创建

操作1

result = {{name}}

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

测试触发器

云函数

创建云函数

代码如下:

exports.main = function functionName(event, callback) {
  console.log(event.data)
  callback(null, "hello world")
}

创建触发器

测试触发器

触发类型:微信支付回调

准备工作

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

App({
  onLaunch: function () {
    require('./vendor/sdk-v{{book.latestVersionWechat}}.js')
    let clientID = '[[client_id]]'
    wx.BaaS.init(clientID)

    wx.BaaS.login()
  }
})

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

Page({
  pay: function () {
    let params = {
      totalCost: 0.1,
      merchandiseDescription: '一条支付描述'
    }

    wx.BaaS.pay(params).then(res => {
      console.log('pay')
    }, err => {
      // 未完成用户授权或发生网络异常等
      console.log(err)
    })
  }
})

下载完整 demo

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

邮件-支付回调

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

名称内容

邮件标题

用户支付成功

邮件内容

用户支付了{{total_cost}}元, 订单号:{{trade_no}}

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

微信模板消息-支付回调

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

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

WebHook-支付回调

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

数据表操作-支付回调

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

云函数-支付回调

创建云函数

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

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

触发云函数

触发类型:定时任务

准备工作

创建触发器

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

测试触发器

触发类型:文件操作

准备工作

创建触发器

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

测试触发器

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

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

触发类型:IncomingWebhook

准备工作

创建触发器

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

测试触发器

触发类型:微信消息推送

info 假如你已开通客服消息功能,微信消息推送中的「客服消息事件」将统一转送至该服务处理, 如需单独处理客服消息事件,请重新授权小程序并取消「帮助小程序接受和发送客服消息」。

准备工作

创建触发器

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

测试触发器

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

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

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

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

准备工作

创建触发器

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

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

测试触发器

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

App({
  onLaunch: function () {
    require('./vendor/sdk-v{{book.latestVersionAlipay}}.js')
    let clientID = '[[client_id]]'
    my.BaaS.init(clientID)

    my.BaaS.login()
  }
})

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

Page({
  pay: function () {
    let params = {
      totalCost: 0.01,
      merchandiseDescription: '一条支付描述'
    }

    my.BaaS.pay(params).then(res => {
      console.log('pay')
    }, err => {
      // 未完成用户授权或发生网络异常等
      console.log(err)
    })
  }
})

支付成功结果:

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

Last updated