2026-04-02 00:29:36 -05:00
's'
2026-03-10 11:48:50 -05:00
's'
2026-04-02 00:29:36 -05:00
's'
2026-03-27 19:07:24 -05:00
's'
2026-03-13 03:43:50 -05:00
's'
2026-03-12 00:34:50 -05:00
's'
2026-03-10 04:41:20 -05:00
's'
2026-03-27 19:07:24 -05:00
's'
2026-03-27 18:20:36 -05:00
2026-03-26 02:45:15 -05:00
's'
2026-03-10 04:41:20 -05:00
's'
2026-03-27 19:35:39 -05:00
's'
2026-03-27 18:20:36 -05:00
's'
2026-03-27 18:20:36 -05:00
's'
2026-03-27 18:20:36 -05:00
's'
2026-03-10 04:41:20 -05:00
's'
2026-03-10 04:41:20 -05:00
's'
2026-04-01 02:23:17 -05:00
's'
2026-03-10 04:41:20 -05:00
sh
2026-03-13 19:05:55 +08:00

NomadVIP | 异度星球

NomadVIP 前端Next.js App Router负责会员购买、支付跳转、支付状态轮询以及与 payjsapi / PocketBase 联动完成 VIP 开通。

核心流程

  1. 前端调用 app/api/pay 发起支付。
  2. app/api/pay 按设备分流:
    • 微信内:xorpay
    • PC / 手机浏览器:zpay
  3. 支付成功后通过 payjsapi 异步通知写入 PocketBase。
  4. 若通知延迟,前端会调用 app/api/pay/confirm 兜底写入 payments + site_vip

关键配置

复制 .env.example.env.local,按需修改:

变量 说明 默认值
NEXT_PUBLIC_POCKETBASE_URL PocketBase 地址(浏览器侧) https://pocketbase.hackrobot.cn
POCKETBASE_URL PocketBase 地址(服务端) http://127.0.0.1:8090
PAYMENT_API_URL / NEXT_PUBLIC_API_URL payjsapi 公网地址 https://api.hackrobot.cn
PAYMENT_API_INTERNAL_URL 同机部署时 payjsapi 内网地址 http://127.0.0.1:8007
PAYMENT_DEFAULT_AMOUNT 默认支付金额(分) 18800
ZPAY_SUBMIT_URL ZPAY 收银台地址 https://zpayz.cn/submit.php
POCKETBASE_EMAIL / POCKETBASE_PASSWORD confirm 兜底写库所需管理员账号 -

本地开发

npm install
npm run dev

访问 http://localhost:3000

自检与已修复问题2026-04-01

  • 已修复:app/api/pay/confirm 在兜底写 payments 时使用默认金额,可能导致测试价/临时调价场景记账错误。
  • 修复后:优先使用支付网关返回的 pay_price(元)换算为分;只有拿不到实际金额时才回退默认金额。

常见排查

  • 支付发起失败:优先检查 PAYMENT_API_INTERNAL_URL / PAYMENT_API_URL 是否可达。
  • 已支付但未开通:检查 payjsapi/nomadvip/order_status 与异步通知日志。
  • 账号已支付但 VIP 未识别:检查 vip_email_link 关联是否建立。
Description
No description provided
Readme 1.8 MiB
Languages
TypeScript 86.7%
CSS 11.7%
JavaScript 1.6%