支付

该能力可以让zion的用户通过内置的支付行为完成收款、退款等操作。目前已经支持微信小程序的支付、微信H5支付、支付宝网页端一次性支付和支付宝周期订阅支付。

该能力仅专业版及企业版用户可用,如需使用,请将项目升级到所需版本。若专业版到期,也将导致支付功能失效,请注意及时续费。

使用教程

第一步:配置支付所需基础信息

打开“配置”进入“支付”

绑定订单表并激活支付功能

需要先创建一张自己的订单表,订单表中的字段没有硬性要求,建议包含价格、用户id等字段。在激活支付时选择这张表,注意:

  • 支付宝和微信支付共用这一张订单表

  • 绑定后将无法解绑或换绑,且订单表将无法删除

激活支付后,系统将自动完成以下操作:

创建三张表

  • 支付表:用于保存支付记录。订单表1:N支付表,因此一笔订单可以有多笔支付。
  • 周期性支付表:保存周期支付的记录。
  • 退款表:用于保存退款记录。支付表1:N退款表,因此一笔支付可以分多次退款。

创建行为流

  • 微信支付

    • 微信支付回调:支付完成后自动触发
    • 微信退款回调:退款完成后自动触发
  • 支付宝

    • 支付宝支付或退款:一次性支付或退款完成后自动触发
    • 支付宝周期性支付管理回调:发起或取消周期性支付后触发
    • 支付宝周期性支付定时扣款:用于定时给周期性支付的扣款

配置商户信息(微信支付)

注册微信商户号

教程:如何申请商户号。注册后完成下列步骤:

  1. 开通:产品中心 - 我的产品 - JSAPI支付

  2. 授权:产品中心 - 开发配置 - JSAPI支付 - 授权目录:https://zion-app.functorz.com/

  3. 获取商户号:产品中心 -> 开发配置 -> 商户号

  4. 获取商户密钥:账号中心 -> API安全 -> APIv2密钥

  5. 如需要退款功能,还需要获取 apiclient_cert.p12 文件,见 微信支付规范 中“API证书”的部分

在 Zion 中填写商户号信息

微信支付在小程序端和 Web 端中的配置不同:

  • 小程序端

    • 注册企业小程序:个人小程序无法使用支付 小程序注册流程

    • 商户号关联小程序:商户号产品中心 - AppID账号管理 - 关联 AppID,将小程序的 AppID(在微信公众平台的基本设置里或Zion预发布界面中找到)填入之后确认绑定

    • 完成上述步骤后,将必要信息填入 Zion

  • Web 端(使用的是微信 JSAPI 支付,只允许在微信客户端内进行支付

    • 商户号授权:需要在商户号中配置支付授权目录,地址是 Web 的发布地址(配自定义域名后用自定义域名)。例如:abc2432io8ui.villa.functorz.com

    • Web 端必须用微信授权登录:

      1. 准备公众号:必须是服务号,且已完成企业认证

      2. 进入商户号,关联服务号的 AppID:产品中心 - AppID 账号管理 - 关联 AppID

      3. 在公众号中进行网页授权域名,用web发布地址中的域名 (配自定义域名后用自定义域名)

      4. 授权域名时,需要将校验文件上传到根目录下

      5. 授权完成后,配置登录方式(用公众号 AppID 和 APP Secret)

      完成上述步骤后,将商户信息填入(其中 AppId 为公众号的 APPId):

配置商户信息(支付宝)

  1. 注册商户号(目前支持电脑网站支付的方式和服务商代开发模式),链接:支付宝接入准备

  2. 从支付宝开放平台获取信息,并填入支付配置

    1. Appid

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

第二步:使用支付行为

支付、退款、发起或取消周期支付,都遵循下图的流程。开发者只需要配置其中的绿色部分:

  1. 在前端页面上使用行为:发起支付、退款或周期支付
  2. 在对应的行为流中配置业务逻辑
  3. 在前端页面上查询最终结果

一次性支付和退款

  1. 使用支付/退款行为

    行为参数说明:

    行为类型 参数 说明
    支付 订单表ID 整数,必须是绑定的订单表里某一行的ID(因此建议先添加订单,成功时调用支付行为)。
    金额 小数,单位为元,小数点后不能超两位,且必须大于0.01。
    商品介绍(微信支付) 文本,商品的描述。
    商品名称(支付宝) 文本,可以是商品的标题/交易标题/订单标题/订单关键字等。
    退款 支付表ID 整数,可以用订单ID作为过滤条件,获取对应的支付表ID。
    退款金额 小数,单位为元,小数点后不能超两位。同一笔支付可以发起多次退款,退款金额的总和不能超过支付的总金额。
  2. 配置支付或退款完成后的业务逻辑

    支付或退款完成后将自动触发对应的行为流,行为流内置了一个代码块对结果分析,并返回关键信息。开发者需要在后续的分支中,自行配置业务逻辑。

    参数 说明
    orderId 调用支付行为时填写的orderId,可以用它找到对应的订单记录,并更新其状态
    paymentStatus 支付状态:REDUNDED - 退款成功,FAILED - 退款失败
    callbackProgressed 一次支付可能会多次触发行为流。该参数用于避免重复执行,当其值为 false 时,表示为第一次触发;当为 true 时,表示重复触发。因此 paymentStatus 为 FAILED 且 callbackProgressed 为 false 时,才表示支付失败。支付成功的判断同理。

    为了安全起见,防止有人恶意利用假的订单信息进行支付或退款(让实际支付的金额远小于订单中的金额),在支付或退款成功后,建议检查实际的支付金额和订单中的金额是否相等。具体方法是用订单 id 作为过滤条件,分别获取订单表数据和支付表数据,再进行条件判断。

  3. 获取支付结果

    由于更新订单表/支付表/退款表是在自定义行为流中进行的,而且需要一定的时间。前端页面可以用订阅的方式,获取最新的数据。 例如调用支付行为后,页面上可以通过订阅支付表的方式,实时接收支付表的状态变化。

周期支付

周期支付涉及到发起、取消、扣款几个步骤

  1. 发起和取消

    类型 参数 说明
    发起 订单表ID 整数,必须是绑定的订单表里某一行的ID(因此建议先添加订单,成功时调用支付行为)。
    价格 小数,单位是元,小数点后不超过两位。由于支付宝的限制,只能支持100元以内的周期支付
    商品名称 文本
    扣款间隔 整数,扣款间隔不能少于7天,无最大限制
    场景 文本,只能填支付宝规定的 场景值 (例如:INDUSTRY|LOTTERY)。同一个用户对同一个场景只能订阅一次
    取消 周期支付表ID 整数,可以用用户ID作为过滤条件获取到对应的周期支付记录
  2. 周期支付扣款

    通过定时触发扣款行为流,查询到需要扣款的周期支付,每个扣款,都需要创建一个新的订单

第三步:权限配置

在权限系统中可以配置行为的权限。尤其是退款行为(权限默认关闭),建议对普通用户关闭,否则可能会造成金钱上的损失。更正确的做法是新建一个类似管理员的角色,给它开放退款权限。

常见报错处理办法

微信支付

  1. 调用支付行为报错:JSAPI缺少参数 total-fee

    • 检查支付的参数是否正确(例如:确保金额有值且大于0.01)

    • 前往商户号检查其状态是否正常

  2. JSAPI param invalid: totle_fee

    • 检查商户号是否关联小程序

支付宝

  1. 发起支付宝周期支付,用户在支付宝端显示“商户协议状态不正常”

    • 查看周期支付表中是否有同一个账户多次订阅的情况,由于支付宝限制一个用户只能用一个场景码订阅一次,因此如果有一个用户订阅多次的情况,请保证发起周期支付的行为中场景码不同
  2. 退款成功后,回调行为流没有触发

    • 由于支付宝的限制,如果是全额退款,不会触发行为流。
Copyright © FunctorZ 2024 all right reserved修订时间: 2025-03-19 11:09:58

results matching ""

    No results matching ""