- 新增 wxpay provider(wechatpay-node-v3 SDK),支持 Native 扫码和 H5 跳转 - 新增 /api/wxpay/notify 回调路由,AES-256-GCM 解密 + RSA 签名验证 - 修复 confirmPayment count=0 静默成功、充值失败返回 true 等 P0 问题 - 修复 notifyUrl 硬编码 easypay、回调金额覆盖订单金额等 P1 问题 - 手续费计算改用 Prisma.Decimal 精确运算,消除浮点误差 - 支付宝 provider 移除冗余 paramsForVerify,fetch 添加超时 - 补充 .env.example 配置文档和 CLAUDE.md 支付渠道说明
83 lines
4.5 KiB
Plaintext
83 lines
4.5 KiB
Plaintext
# 数据库
|
||
DATABASE_URL="postgresql://sub2apipay:password@localhost:5432/sub2apipay"
|
||
|
||
# Sub2API
|
||
SUB2API_BASE_URL="https://your-sub2api-domain.com"
|
||
SUB2API_ADMIN_API_KEY="your-admin-api-key"
|
||
|
||
# ── 支付服务商(逗号分隔,决定加载哪些服务商) ───────────────────────────────
|
||
# 可选值: easypay, alipay, wxpay, stripe
|
||
# 示例(仅易支付): PAYMENT_PROVIDERS=easypay
|
||
# 示例(仅 Stripe): PAYMENT_PROVIDERS=stripe
|
||
# 示例(支付宝+微信直连): PAYMENT_PROVIDERS=alipay,wxpay
|
||
# 示例(全部启用): PAYMENT_PROVIDERS=easypay,alipay,wxpay,stripe
|
||
PAYMENT_PROVIDERS=easypay
|
||
|
||
# ── 易支付配置(PAYMENT_PROVIDERS 含 easypay 时必填) ────────────────────────
|
||
EASY_PAY_PID="your-pid"
|
||
EASY_PAY_PKEY="your-pkey"
|
||
EASY_PAY_API_BASE="https://zpayz.cn"
|
||
EASY_PAY_NOTIFY_URL="https://pay.example.com/api/easy-pay/notify"
|
||
EASY_PAY_RETURN_URL="https://pay.example.com/pay/result"
|
||
# 渠道 ID(部分易支付平台需要,可选)
|
||
#EASY_PAY_CID_ALIPAY=""
|
||
#EASY_PAY_CID_WXPAY=""
|
||
|
||
# ── Stripe 配置(PAYMENT_PROVIDERS 含 stripe 时必填) ────────────────────────
|
||
#STRIPE_SECRET_KEY="sk_live_..."
|
||
#STRIPE_PUBLISHABLE_KEY="pk_live_..."
|
||
#STRIPE_WEBHOOK_SECRET="whsec_..."
|
||
|
||
# ── 支付宝直连(PAYMENT_PROVIDERS 含 alipay 时必填) ────────────────────
|
||
# ALIPAY_APP_ID=
|
||
# ALIPAY_PRIVATE_KEY= # PKCS8 格式私钥(不含 -----BEGIN/END----- 头尾)
|
||
# ALIPAY_PUBLIC_KEY= # 支付宝公钥(非应用公钥,从开放平台获取)
|
||
# ALIPAY_NOTIFY_URL=https://pay.example.com/api/alipay/notify
|
||
# ALIPAY_RETURN_URL=https://pay.example.com/pay/result
|
||
|
||
# ── 微信支付直连(PAYMENT_PROVIDERS 含 wxpay 时必填) ────────────────────
|
||
# WXPAY_APP_ID= # 公众号或移动应用 AppID
|
||
# WXPAY_MCH_ID= # 商户号(10位数字)
|
||
# WXPAY_PRIVATE_KEY= # 商户 API 私钥 PEM(含 -----BEGIN/END----- 头尾)
|
||
# WXPAY_CERT_SERIAL= # 商户 API 证书序列号(40位十六进制)
|
||
# WXPAY_API_V3_KEY= # APIv3 密钥(32位字符串)
|
||
# WXPAY_PUBLIC_KEY= # 微信支付公钥 PEM(从商户平台下载)
|
||
# WXPAY_PUBLIC_KEY_ID= # 微信支付公钥 ID
|
||
# WXPAY_NOTIFY_URL=https://pay.example.com/api/wxpay/notify
|
||
|
||
# ── 启用的支付渠道(在已配置服务商支持的渠道中选择) ─────────────────────────
|
||
# 可选值: alipay, wxpay, stripe
|
||
ENABLED_PAYMENT_TYPES="alipay,wxpay"
|
||
|
||
# ── 订单配置 ──────────────────────────────────────────────────────────────────
|
||
ORDER_TIMEOUT_MINUTES="5"
|
||
MIN_RECHARGE_AMOUNT="1"
|
||
MAX_RECHARGE_AMOUNT="10000"
|
||
# 每用户每日累计充值上限,0 = 不限制
|
||
MAX_DAILY_RECHARGE_AMOUNT="0"
|
||
# 各渠道全平台每日总限额,0 = 不限制(未设置则使用各服务商默认值)
|
||
#MAX_DAILY_AMOUNT_ALIPAY="0"
|
||
#MAX_DAILY_AMOUNT_WXPAY="0"
|
||
#MAX_DAILY_AMOUNT_STRIPE="0"
|
||
PRODUCT_NAME="Sub2API 余额充值"
|
||
|
||
# ── 手续费(百分比,可选) ─────────────────────────────────────────────────────
|
||
# 提供商级别(应用于该提供商下所有渠道)
|
||
#FEE_RATE_PROVIDER_EASYPAY=1.6
|
||
#FEE_RATE_PROVIDER_STRIPE=5.9
|
||
# 渠道级别(覆盖提供商级别)
|
||
#FEE_RATE_ALIPAY=
|
||
#FEE_RATE_WXPAY=
|
||
#FEE_RATE_STRIPE=
|
||
|
||
# ── 管理员 ────────────────────────────────────────────────────────────────────
|
||
ADMIN_TOKEN="your-admin-token"
|
||
|
||
# ── 应用 ──────────────────────────────────────────────────────────────────────
|
||
NEXT_PUBLIC_APP_URL="https://pay.example.com"
|
||
# iframe 允许嵌入的域名(逗号分隔)
|
||
IFRAME_ALLOW_ORIGINS="https://example.com"
|
||
# 充值页面底部帮助内容(可选)
|
||
#PAY_HELP_IMAGE_URL="https://example.com/qrcode.png"
|
||
#PAY_HELP_TEXT="如需帮助请联系客服微信:xxxxx"
|