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 依赖
This commit is contained in:
2026-04-24 10:51:06 +08:00
parent 31bafee0ab
commit 034aa66ed8
5 changed files with 188 additions and 25 deletions

View File

@@ -18,9 +18,9 @@ use config::AppConfig;
use db::create_pool;
use handlers::{
admin_get_user, admin_update_user_payment, add_favorite, alipay_notify, alipay_pay_page,
create_order, delete_weather, generate_temp_token_handler, get_current_user_profile,
get_favorites, get_user_quota, get_weather_brief, get_weather_details,
health_check, login, mock_login, mock_confirm, payment_index, payment_page, payment_success,
create_order, delete_weather, generate_code, generate_temp_token_handler, get_current_user_profile,
get_favorites, get_user_quota, get_weather_brief, get_weather_details,
health_check, login, mock_login, mock_confirm, payment_index, payment_login_status, payment_page, payment_success,
post_weather_data,
refresh_token, remove_favorite, root, save_user_profile, serve_static_files,
web_generate_login_code, web_login_confirm,
@@ -65,17 +65,17 @@ fn create_server_config(
.service(root) // #[get("/")] - 返回服务信息
// 支付页面(无需认证,外部浏览器访问)
.service(payment_index) // GET /payment — 套餐选择页
.service(generate_code) // GET /payment/generate-code — 网页生成登录码
.service(payment_page) // GET /payment/page需 JWT
.service(payment_success)
.service(alipay_pay_page) // GET /payment/pay需 JWT
.service(alipay_notify) // POST /payment/notify支付宝异步回调
.service(payment_login_status) // GET /payment/login-status网页轮询
// 静态文件(无需认证)
.service(web::resource("/static/{tail:.*}").route(web::get().to(serve_static_files)))
// API 接口
.service(login) // #[post("/api/login")]
.service(mock_login) // #[get("/api/mock-login")](沙箱测试用)
.service(web_generate_login_code) // #[post("/api/web-login/code")](网页端微信登录)
.service(web_login_confirm) // #[post("/api/web-login/confirm")](网页端登录确认)
.service(refresh_token) // #[post("/api/refresh-token")](公开接口,无需认证)
.service(get_weather_details) // #[get("/weather/details")](支持 JWT 或 temp_token公开接口
.service(health_check) // #[get("/health")](公开接口,无需认证)
@@ -97,6 +97,8 @@ fn create_server_config(
.service(get_favorites) // #[get("/api/favorites")]
.service(add_favorite) // #[post("/api/favorites/{id}")]
.service(remove_favorite) // #[delete("/api/favorites/{id}")]
.service(web_generate_login_code) // #[post("/api/web-login/code")](需 JWT
.service(web_login_confirm) // #[post("/api/web-login/confirm")](需 JWT
)
// 健康检查
.service(health_check)