mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 06:36:38 +08:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package openai
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func (p *OpenAIProvider) Balance() (float64, error) {
|
|
if !p.BalanceAction {
|
|
return 0, errors.New("不支持余额查询")
|
|
}
|
|
|
|
fullRequestURL := p.GetFullRequestURL("/v1/dashboard/billing/subscription", "")
|
|
headers := p.GetRequestHeaders()
|
|
|
|
req, err := p.Requester.NewRequest("GET", fullRequestURL, p.Requester.WithHeader(headers))
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
// 发送请求
|
|
var subscription OpenAISubscriptionResponse
|
|
_, errWithCode := p.Requester.SendRequest(req, &subscription, false)
|
|
if errWithCode != nil {
|
|
return 0, errors.New(errWithCode.OpenAIError.Message)
|
|
}
|
|
|
|
now := time.Now()
|
|
startDate := fmt.Sprintf("%s-01", now.Format("2006-01"))
|
|
endDate := now.Format("2006-01-02")
|
|
if !subscription.HasPaymentMethod {
|
|
startDate = now.AddDate(0, 0, -100).Format("2006-01-02")
|
|
}
|
|
|
|
fullRequestURL = p.GetFullRequestURL(fmt.Sprintf("/v1/dashboard/billing/usage?start_date=%s&end_date=%s", startDate, endDate), "")
|
|
req, err = p.Requester.NewRequest("GET", fullRequestURL, p.Requester.WithHeader(headers))
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
usage := OpenAIUsageResponse{}
|
|
_, errWithCode = p.Requester.SendRequest(req, &usage, false)
|
|
if errWithCode != nil {
|
|
return 0, errWithCode
|
|
}
|
|
|
|
balance := subscription.HardLimitUSD - usage.TotalUsage/100
|
|
p.Channel.UpdateBalance(balance)
|
|
return balance, nil
|
|
}
|