ZPay

Nuxt 模板中支付宝风格的 ZPay 演示提供商。

ZPay 是面向中国(支付宝)的演示提供商。它在 server/payment/providers/zpay-provider.ts 中实现 PaymentProvider 接口,并在 NUXT_ZPAY_URLNUXT_ZPAY_MERCH_IDNUXT_ZPAY_MERCH_KEY 全部设置时由工厂注册。

ZPay 作为非 Stripe、基于签名的网关的示例被包含进来。它无法通过 NUXT_PUBLIC_PAYMENT_PROVIDER 选择(该开关只在 Creem 与 Stripe 之间切换),并且 存在下文的金额注意事项。请将其视为参考,而非生产路径。

配置

变量用途
NUXT_ZPAY_URLZPay API 端点。
NUXT_ZPAY_MERCH_ID商户 ID。
NUXT_ZPAY_MERCH_KEY用于 MD5 签名的商户密钥。
NUXT_ZPAY_NOTIFY_URLZPay 支付后回调的公开 URL。

环境变量

结账

createPayment 构建一个支付宝类型的 ZPay 请求(type: "alipay"),用 MD5 + 商户密钥 对排序后的参数签名,并返回跳转 checkoutUrl。用户支付后经 NUXT_ZPAY_NOTIFY_URL 返回。

Webhook

  • 路径: GET /api/payment/notify/zpaynotify/zpay.get.ts)—— 这是一个 GET 回调,与 Creem/Stripe 的 POST webhook 不同。
  • 校验: 对排序后的查询参数与商户密钥重新计算 MD5 签名,与 sign 参数比较。
  • 处理结果: trade_status === "TRADE_SUCCESS" 将订单标记为 success 并创建一条 一次性 subscription;否则订单标记为失败。

ZPay 金额注意事项

create.post.ts 记录的金额/币种来自 app/config/payment-config.ts,但 ZPay 提供商的 createPayment 当前收取的是 shared/config/payment.ts 中的 Math.round(paymentConfig.amountCNY * 100) —— 即对每一笔订单都使用硬编码的样例 CNY 金额,与所选方案无关。

上线前请替换 shared/config/payment.ts,并将 ZPay 的收费金额映射到你真实的按方案定价。

验证

  • 设置 ZPay 环境变量后,已登录用户可发起结账并创建一条 payment 行。
  • 带有效 MD5 签名且 TRADE_SUCCESS 的回调将订单翻转为 success;无效签名被拒绝。
  • 收费金额与所选方案一致(在替换样例 amountCNY 之后)。

On this page