Skip to Content
帮助文档行为配置操作指南配置支付微信支付(微信小程序)

微信支付(微信小程序)

Zion 微信小程序通过微信支付的 小程序支付 产品收款,支持单次支付和退款。开始前,请先阅读支付功能概述,准备订单表并了解支付结果的处理方式。

开始前

  • 使用完成企业认证的小程序;个人小程序不能开通微信支付。
  • 在微信支付商户平台 注册商户号并开通 JSAPI 支付。
  • 将商户号与当前小程序的 AppID 关联。

在微信支付商户平台关联小程序 AppID

  • 获取商户号和 API v2 密钥。

在微信支付商户平台获取商户号和 API v2 密钥

支付配置

配置支付配置

打开 行为 → 支付,点击 新建,填写配置名称,支付渠道 选择 微信支付,然后点击 创建并开始配置。如果这是项目中第一个支付配置,需要先绑定订单表。

如果项目还要在 Web 应用中使用微信支付,请另建一个配置,参阅微信支付(Web 应用)。

填写商户信息

配置项必填填写方式说明
App ID是文本已与商户号关联的小程序 AppID
商户号是文本微信支付商户号
商户密钥是Secret商户平台设置的 API v2 密钥
apiclient_cert.p12 文件仅退款需要上传文件微信支付 API 证书,上传后自动保存为 Secret

微信支付的通知地址由 Zion 在每次请求时自动提供,无需在商户平台配置。

选择支付产品和客户端

在 支付产品 中勾选 小程序支付,并在 客户端管理 中勾选微信小程序的客户端。

配置支付结果处理

在 支付结果处理 中为 支付完成时 和 退款成功时 各绑定一个行为流,具体步骤见下文的配置支付结果行为流。

配置权限

打开 权限管理,按角色勾选允许通过这个配置发起的支付类型:

支付类型默认建议
单次支付所有角色已开启为需要付款的角色保留,例如已登录用户
退款未开启只为可信任的管理员角色开启

也可以在 设置 → 权限 → 支付 中统一查看和修改。

配置支付结果行为流

微信支付有两种支付事件:支付完成时 和 退款成功时。Zion 收到微信的通知后,先更新支付表或退款表,再运行对应的行为流。你需要在行为流中完成更新订单、发放或回收权益等业务。

支付完成时

用户付款成功后,支付记录变为 SUCCESSFUL,Zion 运行此行为流。支付失败或用户取消支付时不会运行。

添加入参

为行为流添加入参 payment_id(长整数),在支付配置中绑定 支付回调 → 支付 → id。

查询支付记录

添加 「数据库 - 获取数据」节点,查询支付表,条件为 id 等于 payment_id。

判断支付金额是否准确

由于实际支付的金额和订单记录中的金额可能不一致,需要判断金额准确后再做后续处理。

⚠️

这一步非常重要。如果跳过,攻击者可以篡改支付金额,用远低于订单价格的金额完成支付,给你造成直接的经济损失。

添加 条件分支,用以下条件判断金额是否准确:

  • 支付记录/总金额 等于 支付记录/order/{金额字段}。
  • 支付记录/币种 等于 支付记录/order/{币种字段}。

更新订单并发放权益

在条件成立的分支中:

  1. 添加 数据库 节点修改订单表,把订单状态改为已支付。
  2. 按业务需要发放权益,例如为对应的账户开通会员、增加积分,或发送通知。

配置完成后,行为流的结构如下:

退款成功时

退款有了结果后,退款记录变为 REFUNDED(退款成功)或 FAILED(退款失败),Zion 运行此行为流。退款成功和退款失败都会进入这个行为流,需要分别处理。

添加入参

添加入参 refund_id(长整数),在输入配置中绑定 支付回调 → 退款 → id。

查询退款记录和订单

添加 「数据库 - 获取数据」节点,查询退款表,条件为 id 等于 refund_id。

按退款结果分别处理

添加 条件分支:

  • 退款记录/状态 等于 REFUNDED:退款成功。在这个分支中再添加 条件分支,判断是全额退款还是部分退款:
    • 退款记录/金额 等于 退款记录/支付/总金额:全额退款,修改订单状态,并回收全部已发放的权益。
    • 其他情况:部分退款,按业务需要修改订单状态,并回收对应部分的权益。
  • 退款记录/状态 等于 FAILED:退款失败。按业务需要通知管理员或用户,订单保持原状态。

配置完成后,行为流的结构如下:

配置前端支付行为

单次支付

添加创建订单行为

调用支付行为前,先在已绑定的订单表中创建订单。订单金额、商品和用户等业务数据应保存在订单表中。

添加支付行为

在按钮或其他组件的触发器中添加 支付,支付类型 选择 单次支付,支付配置 选择微前面创建的支付配置,支付产品 选择 小程序支付。

参数类型必填说明
订单表 id长整数是已绑定订单表中的订单记录 id
金额小数是单位为元,小数点后最多两位
商品介绍文本是本次交易的商品描述

支付行为的 成功时 表示前端调用已成功返回,最终支付状态仍以 支付完成时 为准。出于安全考虑,成功时 不能配置修改数据的行为。

处理支付完成

支付成功后,Zion 把支付记录更新为 SUCCESSFUL,并运行 支付完成时 绑定的行为流,在其中更新订单和发放权益。配置方法见支付完成时。

显示最终结果

前端查询订单表或支付表显示最终状态。需要及时刷新时,可以采用订阅查询的方法。

退款

开放退款权限

退款权限默认不开放。在支付配置的 权限管理 中,只为可信任的管理员角色勾选 退款。

添加退款行为

添加 支付 行为,支付类型 选择 退款。

参数类型必填说明
支付表 id长整数是需要退款的支付记录 id,不是订单 id
退款金额小数是单位为元;超过剩余可退金额时,按剩余可退金额退款

可以用订单 id 作为过滤条件查询对应的支付记录,再绑定其 id。只有 SUCCESSFUL 或 PARTIALLY_REFUNDED 的支付记录可以退款。

处理退款结果

发起退款后,退款记录状态为 REFUNDING。微信通知退款结果后,Zion 把退款记录更新为 REFUNDED 或 FAILED,并运行 退款成功时 绑定的行为流。配置方法见退款成功时。

常见问题

  1. 提示 JSAPI缺少参数 total_fee:确认金额有值、不小于 0.01,且小数点后不超过两位;同时检查商户号状态。
  2. 提示 JSAPI缺少参数 appId:确认 App ID 填写的是当前小程序的 AppID,并且已与商户号关联。
  3. 退款失败:检查当前角色是否有该支付配置的退款权限,并确认已上传 apiclient_cert.p12。
  4. 前端显示成功但订单未更新:检查 支付完成时 是否绑定了行为流、行为流输入是否已配置,以及修改是否已经发布。
  5. 支付行为提示未启用支付产品:在支付配置的 支付产品 中勾选 小程序支付。
Last updated on