From 2603db481c2249c6a5757763bd795ecee531a58d Mon Sep 17 00:00:00 2001 From: one-ccs Date: Mon, 18 May 2026 20:57:48 +0800 Subject: [PATCH] fix: Fix OpenRouter balance inquiry 403 error --- controller/channel-billing.go | 42 ++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/controller/channel-billing.go b/controller/channel-billing.go index 751ee3600ac..dd477095baa 100644 --- a/controller/channel-billing.go +++ b/controller/channel-billing.go @@ -121,6 +121,13 @@ type OpenRouterCreditResponse struct { } `json:"data"` } +type OpenRouterKeyResponse struct { + Data struct { + LimitRemaining float64 `json:"limit_remaining"` + TotalUsage float64 `json:"usage"` + } +} + // GetAuthHeader get auth header func GetAuthHeader(token string) http.Header { h := http.Header{} @@ -307,19 +314,34 @@ func updateChannelAIGC2DBalance(channel *model.Channel) (float64, error) { } func updateChannelOpenRouterBalance(channel *model.Channel) (float64, error) { + authHeader := GetAuthHeader(channel.Key) + url := "https://openrouter.ai/api/v1/credits" - body, err := GetResponseBody("GET", url, channel, GetAuthHeader(channel.Key)) - if err != nil { - return 0, err + body, err := GetResponseBody("GET", url, channel, authHeader) + if err == nil { + response := OpenRouterCreditResponse{} + err = json.Unmarshal(body, &response) + if err != nil { + return 0, err + } + balance := response.Data.TotalCredits - response.Data.TotalUsage + channel.UpdateBalance(balance) + return balance, nil } - response := OpenRouterCreditResponse{} - err = json.Unmarshal(body, &response) - if err != nil { - return 0, err + + url = "https://openrouter.ai/api/v1/key" + body, err = GetResponseBody("GET", url, channel, authHeader) + if err == nil { + response := OpenRouterKeyResponse{} + err = json.Unmarshal(body, &response) + if err != nil { + return 0, err + } + balance := response.Data.LimitRemaining + channel.UpdateBalance(balance) + return balance, nil } - balance := response.Data.TotalCredits - response.Data.TotalUsage - channel.UpdateBalance(balance) - return balance, nil + return 0, err } func updateChannelMoonshotBalance(channel *model.Channel) (float64, error) {