feat(server): /v1/pay 下单代理端点 + 购买台账(JWT 鉴权,user→biz_ref 映射)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
This commit is contained in:
@@ -33,6 +33,7 @@ import (
|
||||
"github.com/wangjia/pangolin/server/internal/httpapi"
|
||||
"github.com/wangjia/pangolin/server/internal/mtls"
|
||||
"github.com/wangjia/pangolin/server/internal/nodes"
|
||||
"github.com/wangjia/pangolin/server/internal/pay"
|
||||
agentv1 "github.com/wangjia/pangolin/server/internal/pb/agentv1"
|
||||
"github.com/wangjia/pangolin/server/internal/provision"
|
||||
"github.com/wangjia/pangolin/server/internal/provision/providers"
|
||||
@@ -299,6 +300,18 @@ func mountV1(r chi.Router, sqlDB *sql.DB, rdb *redis.Client, nodeSvc *nodes.Serv
|
||||
webhookHandler := codes.NewWebhookHandler(codesStore, rdb,
|
||||
os.Getenv("WEBHOOK_SECRET"), 5*time.Minute, 15*time.Minute)
|
||||
|
||||
// ── Pay(pay v2 统一支付网关;PAY_BASE_URL 未配则整组不挂载)──────────────
|
||||
var payHandler *pay.Handler
|
||||
if payBase := os.Getenv("PAY_BASE_URL"); payBase != "" {
|
||||
paySystem := getenvDefault("PAY_BIZ_SYSTEM", "pangolin")
|
||||
paySecret := os.Getenv("PAY_BIZ_SECRET")
|
||||
payClient := pay.NewClient(payBase, paySystem, paySecret)
|
||||
payStore := pay.NewStore(sqlDB)
|
||||
payHandler = pay.NewHandler(payClient, payStore, sqlDB)
|
||||
} else {
|
||||
log.Printf("PAY_BASE_URL 未配置 — /v1/pay 支付端点不挂载")
|
||||
}
|
||||
|
||||
// ── Usage ─────────────────────────────────────────────────────────────────
|
||||
usageStore := usage.NewStore(sqlDB)
|
||||
usageSvc := usage.NewService(usageStore, rdb, nil, time.Hour)
|
||||
@@ -386,6 +399,13 @@ func mountV1(r chi.Router, sqlDB *sql.DB, rdb *redis.Client, nodeSvc *nodes.Serv
|
||||
protected.Post("/ads/unlock", adsHandler.ServeHTTP)
|
||||
protected.Get("/plans", accountAPI.ListPlans)
|
||||
protected.Get("/notices", accountAPI.ListNotices)
|
||||
if payHandler != nil {
|
||||
protected.Get("/pay/catalog", payHandler.Catalog)
|
||||
protected.Post("/pay/orders", payHandler.CreateOrder)
|
||||
protected.Get("/pay/orders/{orderNo}", payHandler.GetOrder)
|
||||
protected.Post("/pay/orders/{orderNo}/retry", payHandler.Retry)
|
||||
protected.Post("/pay/orders/{orderNo}/cancel", payHandler.Cancel)
|
||||
}
|
||||
|
||||
if nodeAPI != nil {
|
||||
protected.Get("/nodes", nodeAPI.ListNodes)
|
||||
|
||||
Reference in New Issue
Block a user