Stripe支付
国内暂时无法使用Stripe支付,此教程是为海外版用户准备。访问海外版
一、准备工作
准备Stripe账号
将项目升级至专业版及以上
当前支付行为只支持专业版及以上,且专业版项目降级后,原有的支付行为也会失效。
二、项目内创建订单表
在开始支付配置前,确保你在项目内创建好订单表,这张订单表将会和系统的支付表关联起来。如果原来就已经创建好了,可以跳过这步。
三、填写基础信息
激活支付功能
首次使用支付时,需要前往“配置”中的“支付”激活
激活时,需要绑定前面第二步创建的订单表,系统会自动给订单表和支付表创建一对多的关系。需注意:
- 所有的支付方式共用一张订单表
- 绑定后将无法解绑或换绑,且订单表将无法删除,因此绑定时一定要谨慎
绑定订单表并激活后,系统将自动完成以下操作:
- 数据模型中创建三张表。开发者不可删除不可修改,且数据由系统写入,用户只能从中获取数据:
- 支付表:用于保存支付记录。订单表1:N支付表,因此一笔订单可以有多笔支付
- 周期性支付表:保存周期支付的记录
- 退款表:用于保存退款记录。支付表1:N退款表,因此一笔支付可以分多次退款
- 自动创建两个行为流:支付回调、退款回调
- 支付回调行为流:支付行为完成后触发的行为流
- 退款回调行为流:退款行为完成后触发的行为流
填写Stripe信息
从 Stripe 获取 Publishable key 和 Secret key 填入项目并保存
四、使用支付/退款行为
添加行为
在行为列表中找到Stripe行为
配置行为参数
1. 单次支付行为
参数 | 类型 | 说明 |
---|---|---|
Order ID | 整数 | 必须是绑定的订单表的ID |
Currency | 文本 | Stripe支持的货币单位,详见:Supported currencies |
Amount | 小数 | 单位为货币的最小单位。例如,如果要收取100美元(USD),由于美元最小单位为美分,因此金额的值需为1000。详见:Supported currencies |
2. 退款行为
参数 | 类型 | 说明 |
---|---|---|
Payment ID | 整数 | 必须是支付表的ID |
Refund Amount | 小数 | 退款金额,必须小于支付的金额 |
3. 周期支付行为
参数 | 类型 | 说明 |
---|---|---|
Type | 选项 | Initiate - 发起周期支付,Cancel - 取消周期支付 |
Order ID | 小数 | 必须是绑定的订单表的ID |
Price ID | 文本 | 从Stripe获取到的价格ID |
配置行为权限
在权限系统中可以配置行为的权限。尤其是退款行为,建议对普通用户关闭,否则可能会造成金钱上的损失。更正确的做法是新建一个类似管理员的角色,给它开放退款权限。
五、配置行为完成后的业务逻辑
前端页面不安全(比如可以绕过支付,用接口直接调用“成功时”里的行为),因此在支付相关的“成功时”里禁止修改数据。更为安全的机制是:行为完成后,Stripe平台给项目后端发通知,触发相应的行为流。行为流在后端运行,因此非常安全。
Stripe支付回调行为流
支付行为完成后,该行为流会被触发。行为流内置了几个节点:
- 代码块 callback handler。此代码块用于解析支付相关数据,并提取关键信息(如订单ID、支付状态等),代码块会三个输出:
- orderId - 调用支付行为时传入的orderId
- paymentStatus - 支付状态
- callbackProcessed - 用于判断由于支付的回调是否是重复发送,和 paymentStatus 一起判断支付的真正状态
- 条件分支
- 用paymentStatus和callbackProcessed的状态判断支付是否成功
- 在分支内配置你自己的业务逻辑
Stripe退款回调行为流
退款行为完成后,该行为流会被触发。行为流内置了几个节点:
- 代码块 callback handler,此代码块用于解析支付相关数据,并提取关键信息(如订单ID、支付状态等)代码块会有三个输出:
- orderId:对应的订单表id
- status:退款状态,值为REFUNDED表示退款成功,否则表示失败
- callbackProcessed:用于判断是否为重复触发
- 条件分支。用于处理支付成功和失败的后续逻辑(更新订单表等),需要你自己去配置
周期支付创建/取消回调
当创建或取消周期支付后,该行为流会被触发。在代码块中会更新“recurring_payment”表中的数据
周期支付扣款
周期支付被创建后,当后续有扣款时,Stripe会向项目后端发送通知,此行为流被触发。其中的代码块节点会做以下事情:
- 获取扣款信息
- 创建新订单
- 进行支付扣款
在代码块中找到创建订单的部分,需要根据自己的订单表情况进行修改。例如可以修改后续扣款的金额(不能高于创建周期支付时的金额)
六、获取支付/退款结果
由于更新订单表/单次支付表/周期支付表/退款表是在自定义行为流中进行的,而且需要一定的时间。前端页面需要用订阅的方式,获取最新的数据。
例如调用支付行为后,页面上可以通过订阅支付表的方式,实时接收支付表的状态变化。