微信支付(Web 端)
Zion Web 端仅支持微信 JSAPI 支付,而且页面必须在微信客户端内打开。该渠道支持单次支付和退款。开始前,请先阅读支付功能概述。
开始前
- 准备完成企业认证的微信服务号。
- 在服务号中配置网页授权域名。使用项目的 Web 发布域名;如果项目使用自定义域名,则填写自定义域名。

- 按微信公众号后台提示下载域名校验文件,并将校验文件上传到 Zion 项目根目录。

- 在微信支付商户平台 注册商户号并开通 JSAPI 支付。
- 配置支付授权目录。填写项目的 Web 发布地址;使用自定义域名时填写对应的自定义域名。

- 将商户号与服务号 AppID 关联。

- 获取服务号 AppID、商户号和 API v2 密钥。

- 如需退款,获取
apiclient_cert.p12API 证书。参阅微信支付 API 证书说明 。
配置微信授权登录
Web JSAPI 支付需要获取当前微信用户的身份,因此必须同时配置微信授权登录:
- 在微信公众号后台的 设置与开发 → 基本配置 中获取服务号 AppID 和 AppSecret。
- 在 Zion 打开 行为 → 登录,进入微信登录配置。
- 配置 微信授权登录,填写服务号的 AppID 和 AppSecret。
- 确认该服务号 AppID 已与支付使用的商户号关联。
- 发布登录和支付配置,再从微信客户端内打开 Web 页面测试。
微信授权登录使用的是服务号 AppID 和 AppSecret。微信扫码登录使用的是微信开放平台网页应用的 AppID 和 AppSecret,两者不能混用。Web JSAPI 支付依赖前者。
配置微信支付
激活微信支付
打开 行为 → 支付 → 微信支付(Web),点击 激活。如果这是项目中第一个支付渠道,请选择订单表。
填写商户信息
| 配置项 | 必填 | 说明 |
|---|---|---|
| AppID | 是 | 已与商户号关联的服务号 AppID |
| 商户号 | 是 | 微信支付商户号 |
| 商户密钥 | 是 | 商户平台设置的 API v2 密钥 |
| apiclient_cert.p12 文件 | 仅退款需要 | 微信支付 API 证书 |
保存配置后,从 关联行为流 可以打开系统生成的单次支付处理和退款处理行为流。
发布并测试
发布支付配置、系统表、行为流和页面修改。测试时必须从微信客户端打开已经发布的 Web 地址;普通浏览器无法完成 JSAPI 支付。
单次支付
创建订单并添加行为
先在已绑定的订单表中创建订单,再从组件触发器的 支付 菜单添加 微信支付 → 单次支付。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 订单表 id | 长整数 | 是 | 已绑定订单表中的订单记录 id |
| 金额 | 小数 | 是 | 单位为元,不能小于 0.01,小数点后最多两位 |
| 商品介绍 | 文本 | 是 | 本次交易的商品描述 |
支付行为的 成功时 用于处理前端支付交互结果,不能配置修改数据的行为。最终支付结果必须由支付回调确认。
处理支付回调
系统生成的单次支付处理行为流会更新支付表,并提供:
| 结果 | 类型 | 说明 |
|---|---|---|
orderId | 长整数 | 本次支付关联的订单 id |
paymentFound | 布尔值 | 是否找到对应的支付记录 |
paymentStatus | 文本 | SUCCESSFUL 或 FAILED |
alreadyProcessed | 布尔值 | 当前状态是否已经处理过 |
仅当 paymentFound 为 true 且 alreadyProcessed 为 false 时,根据 paymentStatus 执行业务逻辑。支付成功前应核对订单和支付记录中的金额,再更新订单或发放权益。
显示最终结果
前端查询订单表或支付表显示最终结果。需要及时更新时,可以使用实时数据源或重新查询页面数据。
退款
配置权限并添加行为
退款行为默认不向普通用户开放。在 设置 → 权限 → 支付 中,只为可信任的管理员角色开启微信退款权限。
从 支付 菜单添加 微信支付 → 退款:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 支付表 id | 长整数 | 是 | 需要退款的支付记录 id,不是订单 id |
| 退款金额 | 小数 | 是 | 单位为元;多次退款的总额不能超过原支付金额 |
处理退款回调
系统生成的退款处理行为流会更新退款表,并提供:
| 结果 | 类型 | 说明 |
|---|---|---|
orderId | 长整数 | 退款对应的订单 id |
refundFound | 布尔值 | 是否找到对应的退款记录 |
paymentStatus | 文本 | REFUNDED 或 FAILED |
alreadyProcessed | 布尔值 | 当前退款状态是否已处理过 |
仅在 refundFound 为 true 且 alreadyProcessed 为 false 时处理对应结果。
常见问题
- 微信外部浏览器无法支付:Web JSAPI 支付只能在微信客户端内使用。
- 提示
JSAPI缺少参数 total_fee:确认金额有值、不小于0.01,且小数点后不超过两位;同时检查商户号状态。 - 提示
JSAPI缺少参数 appId:确认服务号 AppID、微信授权登录配置和商户号关联关系一致。 - 退款失败:检查当前角色的退款权限,并确认已经上传
apiclient_cert.p12。 - 前端显示成功但订单未更新:检查单次支付处理行为流是否已发布,以及支付成功分支中是否配置了订单更新逻辑。