feat(saas): add payment integration with Alipay/WeChat mock support

- payment.rs: create_payment, handle_payment_callback, query_payment_status
- Mock pay page for development mode with HTML confirm/cancel flow
- Payment callback handler with subscription auto-creation on success
- Alipay form-urlencoded and WeChat JSON callback parsing
- 7 new routes including callback and mock-pay endpoints

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
iven
2026-04-02 00:41:35 +08:00
parent becfda3fbf
commit b1e3a27043
3 changed files with 459 additions and 4 deletions

View File

@@ -1,10 +1,11 @@
//! 计费模块 — 计划管理、订阅、用量配额
//! 计费模块 — 计划管理、订阅、用量配额、支付
pub mod types;
pub mod service;
pub mod handlers;
pub mod payment;
use axum::routing::get;
use axum::routing::{get, post};
pub fn routes() -> axum::Router<crate::state::AppState> {
axum::Router::new()
@@ -12,4 +13,15 @@ pub fn routes() -> axum::Router<crate::state::AppState> {
.route("/api/v1/billing/plans/{id}", get(handlers::get_plan))
.route("/api/v1/billing/subscription", get(handlers::get_subscription))
.route("/api/v1/billing/usage", get(handlers::get_usage))
.route("/api/v1/billing/payments", post(handlers::create_payment))
.route("/api/v1/billing/payments/{id}", get(handlers::get_payment_status))
// 支付回调(无需 auth
.route("/api/v1/billing/callback/{method}", post(handlers::payment_callback))
}
/// mock 支付页面路由(开发模式)
pub fn mock_routes() -> axum::Router<crate::state::AppState> {
axum::Router::new()
.route("/api/v1/billing/mock-pay", get(handlers::mock_pay_page))
.route("/api/v1/billing/mock-pay/confirm", post(handlers::mock_pay_confirm))
}