fix: 修复付费机制失效处理的5个后端缺口
- 新增POST /payment/refund-notify支付宝退款Webhook - 新增待支付订单自动清理(超过24h→cancelled, 含启动清理) - 新增web登录码过期启动清理 - 永久会员用NULL替代硬编码2099-12-31 - 修复缺失的is_paid_active数据库函数(改用内联SQL)
This commit is contained in:
16
src/main.rs
16
src/main.rs
@@ -1,6 +1,6 @@
|
||||
use actix_web::middleware::{from_fn, DefaultHeaders};
|
||||
use actix_web::{App, HttpServer, web};
|
||||
use tracing::{error, info};
|
||||
use tracing::{error, info, warn};
|
||||
use openssl::ssl::{SslAcceptor, SslAcceptorBuilder, SslFiletype, SslMethod};
|
||||
use reqwest::Client;
|
||||
use sqlx::postgres::PgPool;
|
||||
@@ -18,7 +18,7 @@ use auth::jwt_middleware;
|
||||
use config::AppConfig;
|
||||
use db::create_pool;
|
||||
use handlers::{
|
||||
admin_get_user, admin_update_user_payment, add_favorite, alipay_notify, alipay_pay_page,
|
||||
admin_get_user, admin_update_user_payment, add_favorite, alipay_notify, alipay_pay_page, alipay_refund_notify,
|
||||
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,
|
||||
get_user_orders, health_check, login, mock_login, mock_confirm, sync_order, payment_index, payment_login_status, payment_page, payment_success,
|
||||
@@ -82,6 +82,7 @@ fn create_server_config(
|
||||
.service(payment_success)
|
||||
.service(alipay_pay_page) // GET /payment/pay(需 JWT)
|
||||
.service(alipay_notify) // POST /payment/notify(支付宝异步回调)
|
||||
.service(alipay_refund_notify) // POST /payment/refund-notify(支付宝退款回调)
|
||||
.service(payment_login_status) // GET /payment/login-status(网页轮询)
|
||||
// 静态文件(无需认证)
|
||||
.service(web::resource("/static/{tail:.*}").route(web::get().to(serve_static_files)))
|
||||
@@ -230,6 +231,17 @@ async fn main() -> std::io::Result<()> {
|
||||
|
||||
let http_client = Client::new();
|
||||
|
||||
// 启动时清理所有超过 24 小时的待支付订单
|
||||
match db::cleanup_expired_pending_orders(&pool, None).await {
|
||||
Ok(n) => info!("已清理 {} 个过期待支付订单(启动时)", n),
|
||||
Err(e) => warn!("启动时清理过期待支付订单失败: {}", e),
|
||||
}
|
||||
// 启动时清理所有过期的 web 登录码
|
||||
match db::cleanup_expired_login_codes(&pool).await {
|
||||
Ok(n) => info!("已清理 {} 个过期的 web 登录码(启动时)", n),
|
||||
Err(e) => warn!("启动时清理 web 登录码失败: {}", e),
|
||||
}
|
||||
|
||||
info!("Attempting to start server...");
|
||||
|
||||
let is_production = std::env::var("APP_ENV").unwrap_or_else(|_| "development".into()) == "production";
|
||||
|
||||
Reference in New Issue
Block a user