Skip to content

Commit 1187d88

Browse files
fix: 修复API余额查询 (#1174)
* fix: 使API余额查询可用 * chore: 调整计算方式 * perf: 余额描述变更 --------- Co-authored-by: ChenZhaoYu <790348264@qq.com>
1 parent b07f01b commit 1187d88

File tree

6 files changed

+36
-6
lines changed

6 files changed

+36
-6
lines changed

service/src/chatgpt/index.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ import { ChatGPTAPI, ChatGPTUnofficialProxyAPI } from 'chatgpt'
55
import { SocksProxyAgent } from 'socks-proxy-agent'
66
import httpsProxyAgent from 'https-proxy-agent'
77
import fetch from 'node-fetch'
8-
import axios from 'axios'
98
import { sendResponse } from '../utils'
109
import { isNotEmptyString } from '../utils/is'
1110
import type { ApiModel, ChatContext, ChatGPTUnofficialProxyAPIOptions, ModelConfig } from '../types'
12-
import type { RequestOptions } from './types'
11+
import type { BalanceResponse, RequestOptions } from './types'
1312

1413
const { HttpsProxyAgent } = httpsProxyAgent
1514

@@ -126,6 +125,8 @@ async function chatReplyProcess(options: RequestOptions) {
126125
}
127126

128127
async function fetchBalance() {
128+
// 计算起始日期和结束日期
129+
129130
const OPENAI_API_KEY = process.env.OPENAI_API_KEY
130131
const OPENAI_API_BASE_URL = process.env.OPENAI_API_BASE_URL
131132

@@ -136,17 +137,38 @@ async function fetchBalance() {
136137
? OPENAI_API_BASE_URL
137138
: 'https://api.openai.com'
138139

140+
const [startDate, endDate] = formatDate()
141+
142+
// 每月使用量
143+
const urlUsage = `${API_BASE_URL}/v1/dashboard/billing/usage?start_date=${startDate}&end_date=${endDate}`
144+
145+
const headers = {
146+
'Authorization': `Bearer ${OPENAI_API_KEY}`,
147+
'Content-Type': 'application/json',
148+
}
149+
139150
try {
140-
const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${OPENAI_API_KEY}` }
141-
const response = await axios.get(`${API_BASE_URL}/dashboard/billing/credit_grants`, { headers })
142-
const balance = response.data.total_available ?? 0
143-
return Promise.resolve(balance.toFixed(3))
151+
// 获取已使用量
152+
const useResponse = await fetch(urlUsage, { headers })
153+
const usageData = await useResponse.json() as BalanceResponse
154+
const usage = Math.round(usageData.total_usage) / 100
155+
return Promise.resolve(usage ? `$${usage}` : '-')
144156
}
145157
catch {
146158
return Promise.resolve('-')
147159
}
148160
}
149161

162+
function formatDate(): string[] {
163+
const today = new Date()
164+
const year = today.getFullYear()
165+
const month = today.getMonth() + 1
166+
const lastDay = new Date(year, month, 0)
167+
const formattedFirstDay = `${year}-${month.toString().padStart(2, '0')}-01`
168+
const formattedLastDay = `${year}-${month.toString().padStart(2, '0')}-${lastDay.getDate().toString().padStart(2, '0')}`
169+
return [formattedFirstDay, formattedLastDay]
170+
}
171+
150172
async function chatConfig() {
151173
const balance = await fetchBalance()
152174
const reverseProxy = process.env.API_REVERSE_PROXY ?? '-'

service/src/chatgpt/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@ export interface RequestOptions {
66
process?: (chat: ChatMessage) => void
77
systemMessage?: string
88
}
9+
10+
export interface BalanceResponse {
11+
total_usage: number
12+
}

src/components/common/Setting/About.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ onMounted(() => {
6363
<p>{{ $t("setting.api") }}:{{ config?.apiModel ?? '-' }}</p>
6464
<p v-if="isChatGPTAPI">
6565
{{ $t("setting.balance") }}:{{ config?.balance ?? '-' }}
66+
<span class="text-xs text-neutral-400">({{ $t('setting.monthlyUsage') }})</span>
6667
</p>
6768
<p v-if="!isChatGPTAPI">
6869
{{ $t("setting.reverseProxy") }}:{{ config?.reverseProxy ?? '-' }}

src/locales/en-US.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export default {
6969
socks: 'Socks',
7070
httpsProxy: 'HTTPS Proxy',
7171
balance: 'API Balance',
72+
monthlyUsage: 'Monthly Usage',
7273
},
7374
store: {
7475
siderButton: 'Prompt Store',

src/locales/zh-CN.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export default {
6969
socks: 'Socks',
7070
httpsProxy: 'HTTPS Proxy',
7171
balance: 'API余额',
72+
monthlyUsage: '本月使用量',
7273
},
7374
store: {
7475
siderButton: '提示词商店',

src/locales/zh-TW.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export default {
6969
socks: 'Socks',
7070
httpsProxy: 'HTTPS Proxy',
7171
balance: 'API余額',
72+
monthlyUsage: '本月使用量',
7273
},
7374
store: {
7475
siderButton: '提示詞商店',

0 commit comments

Comments
 (0)