erio
bdf2577f28
fix: 支付安全审核修复(支付宝+微信)
...
支付宝:
- 回调增加 app_id 校验,防止跨商户通知
- 回调增加 sign_type 过滤,仅接受 RSA2
- 退款增加 out_request_no 保证幂等
- 金额解析增加精度保护
- timestamp 改用 CST 时区
微信:
- 自行实现 AES-GCM 解密替代库的 decipher_gcm(修复 AuthTag 未验证)
- WXPAY_PUBLIC_KEY_ID 改为必填
- serial 匹配检查改为强制
- 时间戳校验移到签名验证之前
- nonce 改用 crypto.randomBytes
- publicKey 不允许空 Buffer fallback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:57:55 +08:00
erio
5253bc8d35
fix: 支付宝 H5 下单失败时 fallback 到 PC 页面支付
...
与微信支付保持一致的 fallback 策略。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:40:09 +08:00
erio
e2a6895bb7
fix: H5 fallback 仅在 NO_AUTH 时触发,其他错误正常抛出
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:35:23 +08:00
erio
0c6c6e0ea6
fix: 微信 H5 支付未开通时 fallback 到 Native 扫码
...
移动端尝试 H5 下单失败时自动降级为 Native 二维码模式,
避免因 H5 权限未开通导致支付不可用。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:34:57 +08:00
erio
918750047a
Revert "fix: 微信支付暂时统一使用 Native 扫码模式"
...
This reverts commit ef1078279a .
2026-03-06 22:32:53 +08:00
erio
ef1078279a
fix: 微信支付暂时统一使用 Native 扫码模式
...
H5 支付需要在微信商户平台单独开通权限,当前未开通会报
NO_AUTH 错误。暂时移动端也走 Native 二维码,待 H5 权限
开通后再恢复。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:32:13 +08:00
erio
225f2e0c5a
fix: 微信支付回调验签改用公钥直接验证
...
wechatpay-node-v3 的 verifySign 会尝试拉取平台证书,
但我们使用的是微信支付公钥模式,不需要平台证书。
改用 crypto.createVerify 直接用公钥做 RSA-SHA256 验签。
同时增加 serial 与 WXPAY_PUBLIC_KEY_ID 的匹配校验。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:25:58 +08:00
erio
96962ec38e
fix: 微信支付密钥支持文件路径自动解析
...
在 getEnv() 中对 WXPAY_PRIVATE_KEY 和 WXPAY_PUBLIC_KEY 调用
resolveKeyValue(),与支付宝保持一致,支持通过文件路径配置密钥。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 22:10:50 +08:00
erio
137a780269
refactor: 简化支付展示逻辑 - 有 payUrl 直接跳转,有 qrCode 显示二维码
...
移除 isRedirectPayment / mobileRedirectUrl 等支付类型判断,
前端只根据后端返回的字段决定行为:
- payUrl → 自动跳转,无需确认
- qrCode → 展示二维码 + 中心图标
- clientSecret → Stripe 嵌入式表单
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 19:13:06 +08:00
erio
7be0614c7d
fix: wxpay_direct supportedTypes 修正,避免与易支付 wxpay 冲突
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 19:05:21 +08:00
erio
7cab333213
merge: 合并 wxpay_direct 微信支付直连分支
...
解决冲突:保留 main 的常量化/provider 字段/ENABLED_PAYMENT_TYPES 移除,
合并 worktree 的微信支付直连实现、notifyUrl/returnUrl 传递、签名验证优化。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 19:00:16 +08:00
erio
e72325140b
style: 移动端支付方式选择器改为两列网格布局
...
避免三个选项挤在一行,移动端使用 grid-cols-2,PC 端保持 flex 等宽一行。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 18:54:28 +08:00
erio
d46793f072
feat: 支付宝直连 H5 端使用 wap.pay 唤起支付宝 APP
...
前端传递 is_mobile 参数,AlipayProvider 根据设备类型选择:
- PC: alipay.trade.page.pay (FAST_INSTANT_TRADE_PAY)
- H5: alipay.trade.wap.pay (QUICK_WAP_WAY)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 18:04:11 +08:00
erio
94d25ddc31
refactor: 移除 ENABLED_PAYMENT_TYPES,支付类型由 PAYMENT_PROVIDERS 自动推导
...
PAYMENT_PROVIDERS 配置提供商后,各 provider 的 supportedTypes 自动注册为可用支付类型,
无需再手动配置 ENABLED_PAYMENT_TYPES。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 17:53:47 +08:00
erio
254ead1908
refactor: 常量化订单状态 + 支付渠道/提供商分离显示 + H5自动跳转
...
- 新增 src/lib/constants.ts,集中管理 ORDER_STATUS / PAYMENT_TYPE / PAYMENT_PREFIX 等常量
- 后端 service/status/timeout/limits 全量替换魔法字符串为 ORDER_STATUS.*
- PaymentTypeMeta 新增 provider 字段,分离 sublabel(选择器展示)与 provider(提供商名称)
- getPaymentDisplayInfo() 返回 { channel, provider } 用于用户端/管理端展示
- 支持通过 PAYMENT_SUBLABEL_* 环境变量覆盖默认 sublabel
- PaymentQRCode: H5 支付自动跳转(含易支付微信 weixin:// scheme 兜底)
- 订单列表/详情页:显示可读的渠道名+提供商,不再暴露内部标识符
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 17:34:42 +08:00
erio
3829d0e52e
refactor: 将支付类型硬编码抽取到 pay-utils 统一管理
...
- PaymentTypeMeta 新增 iconSrc、chartBar、buttonClass 字段
- 新增工具函数: getPaymentMeta、getPaymentIconSrc、
getPaymentChannelLabel、isStripeType、isRedirectPayment 等
- PaymentQRCode: 用 meta/工具函数替换散落的颜色和类型判断
- PaymentForm: 提交按钮颜色改用 meta.buttonClass
- PaymentMethodChart: 删除重复的 TYPE_CONFIG,改用 getPaymentMeta
- stripe-popup: 按钮颜色改用 meta.buttonClass
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 16:46:36 +08:00
erio
cee24c3afb
fix: 修复 isAlipayDirect 变量声明顺序导致构建失败
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 16:34:01 +08:00
erio
dc78a41912
fix: alipay_direct 桌面端跳转到支付宝收银台而非显示二维码
...
alipay.trade.page.pay 返回的 payUrl 是跳转链接,不应作为
二维码内容展示。改为显示"前往支付宝收银台"按钮,在新标签页
打开支付宝收银台页面。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 16:32:50 +08:00
erio
ad6b63dd9e
fix: 修复支付宝签名时错误排除 sign_type 导致 invalid-signature
...
支付宝验签字符串包含 sign_type 字段,但 generateSign 错误地
将 sign_type 与 sign 一起排除。只需排除 sign,保留 sign_type。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 16:14:52 +08:00
erio
0763d72a89
fix: 各支付 provider 自行获取 notifyUrl/returnUrl
...
service.ts 不再硬编码传 EASY_PAY 的 notify/return URL,
避免官方支付宝错误使用 EasyPay 的回调地址导致签名失败。
2026-03-06 15:49:54 +08:00
erio
f53aa9e14c
feat: 支持官方支付宝与易支付支付宝同时展示
...
- PaymentType 改为 string 类型,支持复合 key(如 alipay_direct)
- 官方支付宝注册为 alipay_direct,易支付保持 alipay/wxpay
- 前端按 PAYMENT_TYPE_META 展示标签区分(官方直连/易支付)
- 管理后台显示统一改为 getPaymentTypeLabel 通用映射
- 修复 admin/OrderTable 中 wechat 拼写错误
2026-03-06 15:33:22 +08:00
erio
01d5a0b3c4
feat: 支付宝密钥支持文件路径配置
...
ALIPAY_PRIVATE_KEY / ALIPAY_PUBLIC_KEY 可直接填密钥内容,
也可填文件路径,代码自动检测并读取文件。
2026-03-06 15:11:47 +08:00
erio
cba8acdd60
refactor: 微信支付命名从 Native 改为 PC扫码,统一术语
...
- WxpayNativeOrderParams → WxpayPcOrderParams
- createNativeOrder → createPcOrder
- 文档注释统一为「PC扫码 / H5」
2026-03-06 14:31:43 +08:00
erio
b0f1daf469
fix: 修复微信支付 Native/H5 判断逻辑,改为前端设备检测驱动
...
- 修复 clientIp 始终存在导致永远走 H5 的 bug,改用 isMobile 判断
- 前端通过 detectDeviceIsMobile() 传 is_mobile 给后端
- ENABLED_PAYMENT_TYPES 默认改为空,必须显式配置才启用
- 补充 .env.example 配置说明
2026-03-06 14:04:51 +08:00
erio
937f54dec2
feat: 集成微信支付直连(Native + H5)及金融级安全修复
...
- 新增 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 支付渠道说明
2026-03-06 13:57:52 +08:00
erio
e9e164babc
chore: 添加 .gitattributes 强制 LF 行尾
v1.6.0
2026-03-05 23:12:01 +08:00
erio
0a35ba9002
style: 全量 prettier 格式化
2026-03-05 23:10:44 +08:00
erio
ab961e669a
fix: 修复 lint errors(hooks 条件调用、未转义引号、effect 内 setState)
2026-03-05 23:08:48 +08:00
eriol touwa
93a417b312
Merge pull request #4 from dexcoder6/feat/admin-dashboard
...
fix: 数据看板时区统一为 Asia/Shanghai + 订单列表支付方式显示修复
2026-03-05 23:03:24 +08:00
erio
ba1ce6b696
fix: CI 各 job 添加 prisma generate 步骤
...
Prisma 7 需要先 generate 才能生成 @prisma/client 类型,
缺少此步骤导致 typecheck/lint/test 全部失败。
2026-03-05 23:02:27 +08:00
erio
448d36fe2b
feat: 移动端 H5 支付跳转 + 改进移动端检测
...
- PaymentQRCode: 移动端有 payUrl 时直接跳转支付,iframe 中新窗口打开
- detectDeviceIsMobile: 优先使用 navigator.userAgentData.mobile API
2026-03-05 16:21:12 +08:00
miwei
f1e3fd35ef
fix: 数据看板时区统一为 Asia/Shanghai + 订单列表支付方式显示修复
...
- dashboard API 日期计算和 SQL GROUP BY 统一使用东八区,避免 UTC 服务器上"今日"统计偏移
- OrderTable 支付方式显示支持 stripe/wechat/alipay 三种,修复 stripe 误显为微信支付
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 10:13:57 +08:00
erio
8746f474d1
refactor: 支付宝 providerKey 改为 alipay
2026-03-05 01:52:59 +08:00
erio
55756744a1
feat: 集成支付宝电脑网站支付(alipay direct)
...
- 新增 src/lib/alipay/ 模块:RSA2 签名、网关客户端、AlipayProvider
- 新增 /api/alipay/notify 异步通知回调路由
- config.ts 添加 ALIPAY_* 环境变量
- payment/index.ts 注册 alipaydirect 提供商
- 27 个单元测试全部通过
2026-03-05 01:48:10 +08:00
erio
9a90a7ebb9
fix: embedded 模式下也强制 min-h-screen,防止 dark 模式底部白底
v1.5.2
2026-03-04 21:55:43 +08:00
erio
f96f89b7bb
fix: 移除 body 硬编码背景色,修复 dark 模式底部白底问题
2026-03-04 21:23:48 +08:00
erio
56bf0916e3
perf: 添加 paid_at 索引优化 dashboard 查询性能
v1.5.0
2026-03-04 20:08:58 +08:00
eriol touwa
3380b808e2
Merge pull request #3 from dexcoder6/feat/admin-dashboard
...
Feat/admin dashboard
2026-03-04 20:07:49 +08:00
dexcoder6
96436f617a
Merge branch 'touwaeriol:main' into feat/admin-dashboard
2026-03-04 19:06:25 +08:00
eriol touwa
d461880a9e
Merge pull request #2 from dexcoder6/fix/stripe-popup-security
...
fix: Stripe 弹窗安全加固 + 清理未使用依赖
v1.4.1
2026-03-04 18:11:14 +08:00
erio
69cf0d00d1
fix: 添加 packageManager 字段修复 CI pnpm 版本检测
2026-03-04 18:10:24 +08:00
miwei
3a9a32e2c2
feat: 管理后台数据看板
...
新增 /admin/dashboard 页面,提供充值订单统计与分析:
- 汇总统计卡片(今日/累计充值金额、订单数、成功率、平均充值)
- 每日充值趋势折线图(recharts,支持 7/30/90 天切换)
- 充值排行榜(Top 10 用户)
- 支付方式分布(水平条形图)
- 与 /admin 订单管理页面互相导航
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-04 17:06:27 +08:00
miwei
d7d91857c7
fix: Stripe 弹窗安全加固 + 清理未使用依赖
...
安全修复:
- client_secret 和 publishableKey 不再通过 URL 传递,改用 postMessage
弹窗发送 STRIPE_POPUP_READY 信号,父页面响应 STRIPE_POPUP_INIT 传递敏感数据
校验 event.origin 防止跨域消息伪造
- confirmAlipayPayment 改为显式调用,移除动态方法查找
- handleStripeSubmit 中 returnUrl 清理残留 query params
依赖清理:
- 移除未使用的 @stripe/react-stripe-js
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-04 15:27:51 +08:00
eriol touwa
84f38f985f
Merge pull request #1 from dexcoder6/feat/stripe-embedded-popup
...
feat: Stripe 改用 PaymentIntent + Payment Element,iframe 嵌入支付宝弹窗支付
v1.4.0
2026-03-04 14:43:30 +08:00
miwei
964a2aa6d9
feat: Stripe 改用 PaymentIntent + Payment Element,iframe 嵌入支付宝弹窗支付
...
Stripe 集成重构:
- 从 Checkout Session 改为 PaymentIntent + Payment Element 模式
- 前端内联渲染 Stripe 支付表单,支持信用卡、支付宝等多种方式
- Webhook 事件改为 payment_intent.succeeded / payment_intent.payment_failed
- provider/test 同步更新
iframe 嵌入模式 (ui_mode=embedded):
- 支付宝等需跳转的方式改为弹出新窗口处理,避免 X-Frame-Options 冲破 iframe
- 信用卡等无跳转方式仍在 iframe 内联完成
- 弹窗使用 confirmAlipayPayment 直接跳转,无需二次操作
- result 页面检测弹窗模式,支付成功后自动关闭窗口
Bug 修复:
- 修复配置加载前支付方式闪烁(初始值改为空数组 + loading)
- 修复桌面端 PaymentForm 缺少 methodLimits prop
- 修复 stripeError 隐藏表单导致无法重试
- 快捷金额增加 1000/2000 选项,过滤低于 minAmount 的选项
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-04 11:11:46 +08:00
erio
5be0616e78
feat: 支付手续费功能
...
- 支持提供商级别和渠道级别手续费率配置(FEE_RATE_PROVIDER_* / FEE_RATE_*)
- 用户多付手续费,到账金额不变(充值 ¥100 + 1.6% = 实付 ¥101.60)
- 前端显示手续费明细和实付金额
- 退款时按实付金额退款,余额扣减到账金额
v1.3.0
2026-03-03 22:00:44 +08:00
erio
1a44e94bb5
docs: 集成说明补充我的订单和订单管理页面链接
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-03 09:15:43 +08:00
erio
c326c6edf1
docs: ZPay 超链接 + 明文 URL 方便复制
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-03 08:19:20 +08:00
erio
5992c06d67
docs: 同步英文 README,ZPay 链接明文显示,添加 release workflow
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-03 08:17:59 +08:00
erio
90ad0e0895
docs: README 补充易支付协议说明、ZPay 推荐及免责声明
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-03 08:03:02 +08:00