Commit Graph

43 Commits

Author SHA1 Message Date
f7f8a1e03f fix: 全站文案统一为环境计算助手 2026-06-02 13:16:42 +08:00
173bd25d74 fix: 网页端支付页响应式设计-紧凑布局+手机端适配 2026-06-02 13:13:55 +08:00
ebf2fcc383 fix: 网页端已付费用户显示续费套餐(原只显示会员信息无套餐) 2026-06-02 13:11:43 +08:00
2c0bdf18ce fix: Mock支付增加MOCK_PAY_KEY密钥验证(规则:支付宝优先>启用开关>请求头签名) 2026-06-02 12:08:05 +08:00
5d6be08f32 fix: 修复2个支付安全漏洞-未经认证的payment_success确认+未禁用mock_confirm 2026-06-02 11:46:26 +08:00
bcd9bc81e4 fix: 创建订单前查重-防止同一用户同一套餐重复pending订单 2026-06-02 11:38:23 +08:00
49b32a8b2d fix: 添加季卡/半年卡HTML卡片+原价删除线显示 2026-05-27 09:30:54 +08:00
55259a96a6 fix: 套餐定价更新+新增季卡/半年卡+SQL interval适配 2026-05-27 09:18:20 +08:00
80434047df fix: 支付页面文案-检测额度→存储空间,无限次→无限制 2026-05-26 10:35:54 +08:00
722ab837d0 refactor: is_paid→is_member, paid_expires_at→membership_expires_at 全局重命名 2026-05-25 15:33:31 +08:00
94ad9ba190 fix: payment_page支持resume参数复用已有待支付订单 2026-05-25 14:59:33 +08:00
ae46e0b0fc fix: sync-order仅查询状态不确认订单(防止误激活) 2026-05-25 14:50:43 +08:00
d5f87d3d85 fix: rsa2_sign后备逻辑改为from_pkcs8_der(支持裸Base64私钥) 2026-05-25 14:13:32 +08:00
e6e04979dc fix: get_user_quota 返回 was_paid 字段 2026-05-25 13:45:55 +08:00
fed95531fe fix: 维护模式使用500条临时限额而非完全跳过(防滥用) 2026-05-25 13:34:40 +08:00
f82dd8d5de feat: 添加PAYMENT_MAINTENANCE_MODE维护模式 + ServiceUnavailable错误 2026-05-25 13:32:16 +08:00
72cbb8ff28 fix: 添加用户取消订单 + 管理员手动退款端点 2026-05-25 13:09:54 +08:00
5f3b919e92 fix: 添加后台定时重试 + 管理员强制确认 + 审计日志 + mock守卫 2026-05-25 13:04:19 +08:00
af2837e15e fix: 修复付费机制失效处理的5个后端缺口
- 新增POST /payment/refund-notify支付宝退款Webhook
- 新增待支付订单自动清理(超过24h→cancelled, 含启动清理)
- 新增web登录码过期启动清理
- 永久会员用NULL替代硬编码2099-12-31
- 修复缺失的is_paid_active数据库函数(改用内联SQL)
2026-05-25 12:07:15 +08:00
moira
27c8979690 fix: 全量代码审计修复—安全/死代码/错误处理/配置净化
P0 安全修复:
  - 支付宝回调验签 (alipay_notify BTreeMap + rsa2_verify)
  - JWT fallback 'default_secret' 改为 .expect() (panic保底)
  - 安全响应头中间件 (CSP/X-Frame-Options/HSTS)

P1 死代码清理:
  - 移除孤儿文件 src/alipay.rs (284行, 无mod注册)
  - 移除Cargo未使用依赖 (actix-files/error/log/hex/digest)
  - log::info! → tracing::info! (auth.rs)
  - 移除 config.rs server_host + 3个TOML定义

P1 质量修复:
  - 修复 weather.rs unwrap() → unwrap_or
  - 修复 auth.rs+payment.rs 错误吞咽 (add tracing::warn)
  - 修复 main.rs 3x parse().unwrap → unwrap_or

P3 运维:
  - 新增 scripts/backup-db.sh (定时备份用)
  - 新增 README.md (快速入门文档)
  - deploy.sh 集成 backup-db.sh 上传
2026-05-13 17:20:31 +08:00
061c2bbb5a fix: 修复多处代码质量问题-移除unwrap/println/dead-code/重复代码/错误吞咽 2026-05-11 13:38:41 +08:00
2c66528205 fix: goPay 加载状态、轮询 5min 超时;成功页已有小程序引导 2026-05-07 17:33:30 +08:00
df64877a5d fix: 推荐标签移到包年;清理永久套餐的残留 CSS 2026-05-07 17:30:11 +08:00
e074171d44 fix: 网页端套餐只保留包月和包年,移除永久 2026-05-07 17:26:16 +08:00
228a9f3b3b feat: 添加 GET /api/payment/orders 接口,返回用户订单记录 2026-05-07 17:12:31 +08:00
a05b46dfe2 feat: 添加 POST /api/payment/sync-order 接口,用于强制同步订单会员状态 2026-05-07 16:58:55 +08:00
c82bb303f7 fix: payment/success 同步确认订单(防止异步回调未到) 2026-05-07 16:52:41 +08:00
aab0377b3a fix: 支付宝表单 method 改为 GET(沙箱 page.pay 不支持 POST) 2026-05-07 16:39:31 +08:00
05b6520140 fix: 支付宝表单添加 HTML 转义,防止 JSON 双引号破坏属性 2026-05-07 16:27:27 +08:00
d884914338 fix: 支付宝表单使用原始值,浏览器自动处理URL编码
修复 double-encoding 问题:表单 hidden input 不应预先 URL 编码,
浏览器提交时会自动编码,预编码会导致二次编码(如空格变 %2520)
2026-05-07 15:37:51 +08:00
7a194251be fix: 支付宝签名使用原始值,改用表单自动提交方式
- 修复签名源:使用原始参数值(不进行 URL 编码)
- 改用 HTML 表单自动提交方式代替服务器端 API 调用
- 避免 nginx 代理大响应体的问题
2026-05-07 15:19:34 +08:00
2046638721 feat: 实现 Mock 支付功能,修复支付激活会员问题
- 当未配置 ALIPAY_* 环境变量时,自动启用 Mock 支付模式
- Mock 支付页面点击按钮后调用 /api/payment/mock-confirm 激活会员
- 更新 AGENTS.md 文档说明 Mock 支付配置和使用方法
2026-04-28 10:17:26 +08:00
ef246db31c fix: 修复支付宝 RSA2 签名问题
- 支持 base64 编码的 PEM 格式私钥(systemd 环境变量)
- 使用 Digest + Pkcs1v15Sign::new() 进行签名(自动哈希)
- 修复 rsa2_sign 和 rsa2_verify 函数实现
2026-04-27 14:27:14 +08:00
00fea53a4c fix: 修复支付宝 RSA 签名失败问题
- 支持 base64 编码的 PEM 格式私钥(用于 systemd 环境变量)
- RSA 签名/验证前需先用 Sha256::digest() 哈希输入
- 添加 Digest trait 导入
2026-04-27 13:53:18 +08:00
580e68b58c feat(payment): 支持 URL 参数直接传递 JWT 登录 2026-04-27 13:13:32 +08:00
aa84bbc4e6 feat(auth): 修复网页端登录流程,移除 web_generate_login_code 的 JWT 依赖 2026-04-27 09:08:25 +08:00
034aa66ed8 feat(payment): 实现网页端登录码流程(无需微信登录)
- 新增 GET /payment/generate-code:网页端生成 ASD-XXXXXX 登录码
- 新增 GET /payment/login-status:网页轮询查询登录码确认状态
- web_generate_login_code 和 web_login_confirm 增加 JWT 保护
- payment_index JS 改为真实调用 generate-code 并轮询
- 添加 rand crate 依赖
2026-04-24 10:51:06 +08:00
31bafee0ab feat(payment): 重构网页端支付登录流程——小程序生成临时码、网页端扫码确认
- 后端新增 /api/web-login/code (生成临时登录码) 和 /api/web-login/confirm (确认登录)
- 后端新增 /payment/login-status (GET, 轮询登录状态)
- payment_index 页面完全重写:未登录时显示微信扫码登录入口;登录后显示套餐或会员信息
- 沙箱环境下 /payment 通过 mock-login 跳过真实微信认证,方便测试
2026-04-24 09:43:18 +08:00
502ae8babb fix(payment): payment_page支持URL参数传递JWT,payment_index页面跳转时携带JWT 2026-04-23 12:34:39 +08:00
e8286310ea feat(payment): 接入支付宝沙箱环境 (alipay.trade.page.pay) 2026-04-23 12:23:53 +08:00
8c9552fbfc feat: 新增支付页面接口,为接入支付宝做准备
- GET /payment: 套餐选择页(无需认证,外部浏览器打开)
- GET /payment/page: 支付引导页(需 JWT,创建订单)
- GET /payment/pay: 支付宝电脑网站支付占位页(需 JWT)
- AppState 新增支付宝配置字段(可选)
- afterbody.js: PDF下载增加状态提示和重试按钮
2026-04-23 10:48:31 +08:00
9d452c4e75 feat: 统一前后端日志和错误处理 2026-04-19 00:14:22 +08:00
562528a1f0 feat: implement payment order system (create-order, mock-confirm, get-quota) 2026-04-17 12:45:53 +08:00