支付宝

此功能于2024年8月30日进行了更新,本教程适用于更新后的版本。如果你在此之前做过支付配置,将无法使用新版支付。旧版配置流程请见:。

一、准备工作

注册商户号

目前支持电脑网站支付的方式,需要准备商户号,参照【支付宝文档中心-接入准备】注册支付宝Web端商户号 将项目升级至专业版及以上 当前支付行为只支持专业版及以上,否则将无法配置。且专业版项目降级后,原有的支付行为也会失效。

二、配置流程

所有支付/退款配置都分成三部分

  • 基础信息填写:将商户号的信息填入项目
  • 配置行为:在页面上添加支付/退款行为
  • 配置回调行为流:回调行为流指行为完成后被触发的行为流,在这些行为流中配置支付完成的后续业务逻辑

基础信息填写

1. 激活支付功能

首次使用支付时,需要前往“配置”中的“支付”激活

激活时,需要绑定你自己创建的订单表,系统会自动给订单表和支付表创建一对多的关系。需注意:

  • 所有的支付方式共用一张订单表
  • 绑定后将无法解绑或换绑,且订单表将无法删除,因此绑定时一定要谨慎

绑定订单表并激活后,系统将自动完成以下操作:

  • 数据模型中创建三张表。开发者不可删除不可修改,且数据由系统写入,用户只能从中获取数据
    • 支付表:支付记录保存于此。订单表1:N支付表,因此一笔订单可以有多笔支付
    • 周期性支付表:由于微信周期支付的开通条件比较严苛,暂不支持(支付宝和stripe支持)
    • 退款表:用于保存退款记录。支付表1:N退款表,因此一笔支付可以分多次退款
  • 支付回调、退款回调。用于支付/退款完成后的流程处理,文档后面会有详细说明

2. 获取商户号信息

前往支付宝开放平台获取以下内容

  • Appid:在支付宝上户中心获取

  • 用户私钥/支付宝公钥:可以通过下载支付宝开放平台开发助手生成,目前 Zion 仅支持 RSA2 加密协议的公私钥

3. 将相应信息填入项目并保存

配置行为

1. 添加行为

在行为列表中找到支付宝支付行为,添加后选择行为类型:单次支付、周期支付、退款

注意,如果你的行为名称为“支付(V20240831)”,说明是旧版行为,不适用于新版功能,请将其删除后重新添加支付行为。

2. 配置行为参数

单次支付

  1. 订单编号:整数类型,为订单表里某一行的ID
  2. 商品名称:文本类型,可以是商品的标题/交易标题/订单标题/订单关键字等
  3. 金额:小数类型,单位是元,小数点后不超过两位,且必须大于0.01

周期支付

  1. 订单号:整数类型,为订单表里某一行的ID
  2. 价格:小数类型,单位是元,小数点后不超过两位。由于支付宝的限制,只能支持100元以内的周期支付
  3. 商品名称:文本类型
  4. 扣款间隔:整数类型。扣款间隔不能少于7天,无最大限制
  5. 场景:文本类型,填支付宝规定的 场景值 (例如:INDUSTRY|LOTTERY)。同一个用户对同一个场景只能订阅一次

退款

  1. 支付ID:整数类型,支付表的ID
  2. 退款金额:小数类型,单位为元,小数点后不能超两位。同一笔支付可以发起多次退款,退款额总和不超过支付的总金额

配置回调行为流

1. 支付/退款回调

支付宝的支付和退款共用一个回调,两个行为完成后都会触发这个行为流。 内置节点说明

  1. type checking代码块,判断是支付还是退款
  2. payment handler和refund handler代码块,分别用于处理支付和退款。它们都会输出三个参数: a. orderId - 调用支付行为时传入的orderId b. paymentStatus - 退款状态 c. callbackProcessed - 用于判断由于支付的回调是否是重复发送,和 paymentStatus 一起判断支付的真正状态

2. 周期支付创建/取消回调

当创建或取消周期支付后,该行为流会被触发。 内置节点说明

  1. 回调处理代码块,会输出两个参数 a. 外部协议号:标示用户的唯一签约协议号 b. 状态:NOMAL表示签约成功,UNSIGN表示解约成功

3. 周期支付扣款

周期支付被创建后,后续的扣款需要我们主动发起。此行为流为定时触发,每次执行时,会做以下事情:

  1. 找到需要扣款的周期支付
  2. 为每个周期支付创建一个订单
  3. 进行支付扣款

在代码块中找到创建订单的部分,需要根据自己的订单表情况进行修改。例如可以修改后续扣款的金额(不能高于创建周期支付时的金额)

Copyright © FunctorZ 2024 all right reserved修订时间: 2024-10-11 10:43:32

results matching ""

    No results matching ""