238 Commits

Author SHA1 Message Date
erio 014f984f32 chore: mark project as archived — payment integrated into Sub2API v1.15.4-final 2026-04-12 18:36:38 +08:00
erio b14f52dd4a feat: StripeProvider 支持从实例配置读取密钥,无需环境变量
- StripeProvider 支持 instanceConfig(secretKey/publishableKey/webhookSecret)
- ensureDBProviders 在环境变量缺失时从活跃实例配置注册 provider
- createPaymentOrder 对 stripe 也注入实例配置
- user route 的 stripePublishableKey 从 provider 实例读取
v1.15.4
2026-04-04 20:17:16 +08:00
erio 00634fd115 fix: 覆盖模式下支持从数据库 ENABLED_PROVIDERS 注册支付 provider
- 新增 ensureDBProviders() 异步函数,当 OVERRIDE_ENV_ENABLED=true 时
  从数据库读取 ENABLED_PROVIDERS 补注册 provider(不再依赖环境变量 PAYMENT_PROVIDERS)
- 覆盖模式下过滤无活跃实例的支付类型,禁用的实例对应的支付方式不展示
- 所有支付相关入口点(API routes、order service、webhook)统一使用 ensureDBProviders
v1.15.3
2026-04-04 19:13:40 +08:00
erio 22dc7b3ada fix: 恢复 providerInstanceId 为 null 时不允许退款申请 v1.15.2 2026-04-03 21:47:52 +08:00
erio 1bb75b2baa fix: 旧订单允许退款 + 移除自动退款 + 改为默认扣除余额/订阅开关
- providerInstanceId 为 null 的旧订单默认允许退款申请
- 移除 AUTO_REFUND_ENABLED 自动退款功能
- 改为 DEFAULT_DEDUCT_BALANCE:控制退款对话框默认勾选状态
v1.15.1
2026-04-03 20:36:11 +08:00
erio 7622da5dfb merge: PR #20 用户退款申请 + 部分退款 + 自动退款
合并 fix/refund-workflow-and-deploy-updates 分支,解决 6 个冲突:
- 新增 REFUND_REQUESTED / PARTIALLY_REFUNDED 状态
- 用户退款申请接口 POST /api/orders/[id]/refund-request
- 部分退款支持(amount 参数)
- 自动退款开关 AUTO_REFUND_ENABLED
- 保留已有的 prepareDeduction/executeDeduction/rollbackDeduction 拆分
- 保留订阅退款、deductBalance 开关、实例退款开关
- 修正幂等键、审计日志字段
v1.15.0
2026-04-03 20:03:29 +08:00
erio c6b3a43dd1 refactor: processRefund 拆分为 prepare/execute/rollback,移除 _refundHandled hack
- 提取 prepareDeduction / executeDeduction / rollbackDeduction 辅助函数
- 网关退款失败+回滚成功时返回 { success: false } 而非 throw
- 幂等键加时间戳避免重试去重
- 前端处理 success: false 结果
v1.14.1
2026-04-03 18:25:59 +08:00
erio df16796ee8 style: prettier 格式修复 v1.14.0 2026-04-03 02:18:10 +08:00
erio 193d98d1cd feat: 实例级退款开关 + 退款扣余额/订阅开关 + 管理员退款重试
- PaymentProviderInstance 新增 refundEnabled 字段(默认关闭),管理 UI 支持列表行/编辑弹窗 Toggle
- 用户端 canRefundRequest 需同时满足 balance+COMPLETED+实例refundEnabled
- processRefund 新增 deductBalance 参数(默认ON),余额不足时扣到0
- 订阅订单退款支持 extendSubscription 负数扣减天数,带幂等键
- 网关退款失败回滚后正确恢复 COMPLETED(_refundHandled 机制)
- REFUND_FAILED 订单支持管理员重试退款
- RefundDialog 展示余额/订阅信息,显示 payAmount,订阅剩余天数
- 管理员订单列表补充 payAmount/refundAmount/refundAt 字段
- 新增 66 个退款相关单元测试(processRefund/API路由/canRefundRequest)
2026-04-03 02:15:17 +08:00
erio 6dc7b1f569 fix: 更新 limits 测试适配 async + getSystemConfig,修复 format v1.13.3 2026-04-02 18:23:23 +08:00
erio 5fc7ec9b3d fix: 在线配置覆盖对齐——限额校验统一走 getSystemConfig(DB→env) 模式
- /api/orders 金额校验从 getSystemConfig 读取 RECHARGE_MIN/MAX_AMOUNT
- createOrder 每日限额从 getSystemConfig 读取 DAILY_RECHARGE_LIMIT
- getMethodDailyLimit/getMethodSingleLimit 改为 async,走 getSystemConfig
- OVERRIDE_ENV_ENABLED=true 时跳过 provider 硬编码默认值(singleMax=1000)
2026-04-02 18:21:04 +08:00
IanShaw027 8b10b747cc feat: 增加退款申请审批流并支持部分退款与自动退款
新增用户退款申请入口、管理员确认退款能力、部分退款状态流与自动退款开关,并统一退款金额校验与展示。
2026-04-01 23:05:50 +08:00
IanShaw027 6f1621937a fix: 更新部署网络与容器监听配置
让应用容器绑定 0.0.0.0,并为当前部署环境补齐外部网络接入,修复反向代理访问与 Sub2API 联通问题。
2026-04-01 23:04:32 +08:00
erio eaa5c560cd fix: 聚合实例剩余日容量,singleMax受剩余额度约束,剩余<singleMin时渠道不可用 v1.13.2 2026-04-01 18:23:07 +08:00
erio 61c8dc32df style: prettier 格式修复 v1.13.1 2026-04-01 17:52:02 +08:00
erio 331ff29fab feat: queryMethodLimits 聚合实例级限额,selectInstance 无可用实例时明确报错 2026-04-01 17:50:18 +08:00
erio 14a9ba4852 style: prettier 格式修复 v1.13.0 2026-04-01 16:36:59 +08:00
erio 8e8dbe2133 docs: README 新增支付配置在线管理说明,支持管理后台或环境变量两种方式 2026-04-01 16:35:04 +08:00
erio 46f1ad274e feat: 实例限额改为单笔最小/最大+每日总限额,selectInstance按金额过滤 v1.12.21 2026-04-01 16:09:23 +08:00
erio c99dba9fdf style: 实例表单必填项加红色星号,Admin Key与最多订单同行 v1.12.20 2026-04-01 15:04:45 +08:00
erio 5291a67b63 feat: 取消频率限制返回结构化JSON由前端国际化;订阅页支付渠道品牌颜色 v1.12.19 2026-04-01 14:13:34 +08:00
erio 2bcc0736a3 fix: 取消频率限制改为限制创建新订单,而非阻止取消 v1.12.18 2026-04-01 13:50:55 +08:00
erio 892f882d7c style: 启用余额充值开关移到基础配置最顶部 v1.12.17 2026-04-01 13:34:01 +08:00
erio b30bb7f2fe style: 取消频率限制改名为限制取消频率,开关与配置项放到同一排 v1.12.16 2026-04-01 12:46:48 +08:00
erio 638cda2108 feat: 首次开启覆盖环境变量时自动预填所有支付配置并创建实例
- env-defaults 返回服务商实例默认配置(从环境变量读取凭证)
- 首次开启开关时自动创建已配置服务商的实例(仅当无实例时)
- 补充预填 MAX_PENDING_ORDERS
v1.12.15
2026-04-01 11:04:09 +08:00
erio 21918a9b25 fix: 覆盖环境变量开关只在点击保存时持久化
- 新增 OVERRIDE_ENV_ENABLED 标记,不再从配置项推断开关状态
- 避免误打开覆盖环境变量:切换开关不会自动保存,必须点保存设置
v1.12.14
2026-04-01 10:50:28 +08:00
erio 145a3ac2c2 fix: Admin API Key 掩码值加载时显示为空(留空则使用环境变量) v1.12.13 2026-04-01 10:40:18 +08:00
erio 636d46ee52 refactor: Sub2API Key、最多支付中订单、充值限额/超时移入覆盖环境变量区
基础配置区只保留商品名、余额充值开关、取消频率限制
v1.12.12
2026-04-01 10:08:23 +08:00
erio 93592974e9 fix: 无实例的服务商类型不显示占位卡片 v1.12.11 2026-04-01 09:14:39 +08:00
erio 5368eb4861 refactor: 易支付渠道 ID 移入渠道开关旁,开启渠道即填入对应 ID
- 支付宝/微信渠道 ID 输入框跟随渠道开关显示
- 从凭证配置区移除 cid/cidAlipay/cidWxpay 字段
v1.12.10
2026-04-01 03:05:44 +08:00
erio 37a51e2b81 refactor: 充值限额/超时移入基础配置区,始终保存
- 最小/最大充值金额、每日限额、订单超时从覆盖环境变量移到基础配置
- 这些配置始终保存,不再依赖覆盖环境变量开关
2026-04-01 03:04:39 +08:00
erio ef43ba3fe2 feat: 实例级别限额配置 + 负载均衡器日限额过滤
- PaymentProviderInstance 新增 limits JSON 字段(per-channel dailyLimit/singleLimit)
- 负载均衡器选择实例时过滤超出日限额的实例
- selectInstance 传入 paymentType 支持渠道级过滤
- 易支付支持按渠道(支付宝/微信)分别配置限额
- 实例编辑弹窗增加可折叠限额配置区
- 服务商管理并入覆盖环境变量卡片,保存按钮移至底部
v1.12.9
2026-04-01 02:30:36 +08:00
erio 203e4d2c6c refactor: 支付配置页面布局优化
- 基础配置与服务商管理拆为独立卡片
- 服务商管理按类型分组展示实例列表
- 实例列表增加内联 Toggle 实时启用/禁用
- 编辑弹窗中排序和启用改为两列表单布局
v1.12.8
2026-04-01 02:10:29 +08:00
erio 6961246b8e test: 新增支付配置相关单元测试覆盖
- admin config route: GET/PUT 敏感值掩码、allowed keys、ENABLED_PROVIDERS 保护
- provider instance route: GET/PUT/DELETE 配置加解密掩码、凭证变更保护、删除保护
- load balancer: round-robin、least-amount、supportedTypes 过滤
- resolve-enabled-types: 类型过滤与回退逻辑
- user route: token 鉴权、sublabel 冲突检测、config 默认值
- sub2api client: getCurrentUserByToken、getHeaders DB 优先、addBalance、searchUsers
v1.12.7
2026-04-01 01:43:47 +08:00
erio 80ee3d12ee feat: 支付配置支持在线修改 SUB2API_ADMIN_API_KEY,/api/user 改用 token 鉴权 v1.12.6 2026-04-01 00:36:55 +08:00
erio b1975eba2f refactor: 减少 if/else 嵌套层级,抽取 validateEnabledProviders / checkCredentialChangeAllowed 等方法 v1.12.5 2026-04-01 00:06:58 +08:00
erio cabfa5dc18 feat: 有实例的服务商类型禁止关闭(前端提示 + 后端 409 校验) v1.12.4 2026-03-31 23:54:45 +08:00
erio dec46ab786 refactor: 服务商类型 badge 选择(易支付/支付宝官方/微信官方/Stripe)、去掉分组占位改为平铺实例列表、首次开启从环境变量预填充 v1.12.3 2026-03-31 23:02:04 +08:00
erio 11747a0cab style: prettier 格式修复 2026-03-31 22:48:05 +08:00
erio b15eee283f refactor: 服务商管理移入覆盖环境变量配置内,统一管理环境变量相关配置 v1.12.2 2026-03-31 22:37:49 +08:00
erio 28656bbd59 refactor: 支付配置页布局优化 — 覆盖环境变量归入基础配置、支付类型改为 badge 选择、服务商按启用类型动态显示可折叠 v1.12.1 2026-03-31 22:21:20 +08:00
erio 4f1d1a3a5a feat: 支付配置页重构 — 服务商分组卡片布局、实例独立渠道配置、构建跳过环境变量校验 v1.12.0 2026-03-31 22:08:01 +08:00
erio 9064c78ebb fix: 禁止删除有进行中订单的实例,修改凭证时检查进行中订单 v1.11.1 2026-03-31 21:38:01 +08:00
erio ffbc539f7a feat: 支付服务商多实例负载均衡
- 新增 PaymentProviderInstance 表,支持同一服务商配置多个实例
- 凭证 AES-256-GCM 加密存储
- 负载策略:轮询 / 基于已支付金额(选金额最少的实例)
- 创建订单时自动选实例,回调 URL 带实例 ID
- 回调验签、取消、退款均支持实例感知
- 管理后台:实例增删改查 UI + 负载策略选择
- EasyPay Provider 支持构造时注入实例配置
v1.11.0
2026-03-31 21:25:16 +08:00
erio 8505668d56 fix: IFRAME_ALLOW_ORIGINS 支持通配符 *,修复 X-Frame-Options 冲突
- 配置 * 时设置 frame-ancestors * 并移除 X-Frame-Options
- 有自定义 origins 时也移除 X-Frame-Options(与 CSP 冲突)
- 无额外 origins 时才保留 X-Frame-Options: SAMEORIGIN
v1.10.21
2026-03-31 20:51:47 +08:00
erio 619395def8 feat: 支付配置展示服务商卡片分组,渠道开关按服务商归类
- 服务商卡片显示配置状态(已配置/未配置)
- 已配置的服务商下展示其支付渠道开关
- 未配置的服务商灰显,提示需在环境变量中设置
- 服务商和渠道名称支持国际化
v1.10.20
2026-03-31 20:45:53 +08:00
erio 720d00c9fd feat: 支付方式改为多选 badge 选择器,支持国际化显示名 v1.10.19 2026-03-31 20:31:05 +08:00
erio 3cc558efdc feat: 支付配置支持覆盖环境变量,启用后不可关闭
- 新增「覆盖环境变量配置」开关,首次启用时自动加载环境变量默认值
- 可配置:启用的支付方式、充值金额范围、每日限额、订单超时
- 后端优先读 DB 配置,无值时回退到环境变量
- 新增 /api/admin/config/env-defaults 接口获取环境变量默认值
- 一旦启用并保存,开关锁定不可关闭
v1.10.18
2026-03-31 20:22:04 +08:00
erio 71cd271ea1 fix: 导航统一到 layout 顶部栏,各页面移除重复导航链接
- layout.tsx 的 NAV_ITEMS 增加「支付配置」入口
- 各 admin 页面的 actions 移除重复的导航 <a> 链接,仅保留功能按钮
v1.10.17
2026-03-31 19:40:13 +08:00
erio 07e1ab54bc fix: admin 导航按钮添加 flex-wrap 防止溢出隐藏 v1.10.16 2026-03-31 19:15:12 +08:00