CC-Switch 的用量查询 小白式保姆级配置教程
效果图
先上个效果图
NewAPI 搭建的中转站
大部分的中转站都是基于 NewAPI 部署,一般可以在中转站底部 footer 看到是不是,那么可以使用接下来的两种用量查询方式
使用访问令牌
1. 获取用户 ID + 访问令牌:在 NewAPI 系统中转站 ,登录后找到 个人设置 -> 安全设置 -> 系统访问令牌,生成令牌。头像的旁边可以看到你的 ID
2. 填写配置:在 cc-switch 中进入用量查询配置页面,选择 NewAPI 模板,将请求地址、访问令牌、用户 ID 都填写上,注意这 3 个都是必填项。勾选启用用量查询 保存即可查询。
使用 APIKey
这个方式不用生成访问令牌,使用你填写的供应商 key 完成查询。使用 通用模板,在提取器代码输入框中输入以下脚本。
({
request: {
url: "{{baseUrl}}/api/usage/token",
method: "GET",
headers: {
Authorization: "Bearer {{apiKey}}",
},
},
extractor: function (response) {
if (response.code) {
if (response.data.unlimited_quota) {
return {
planName: response.data.name,
total: -1,
used: response.data.total_used / 500000,
unit: "USD",
};
}
return {
isValid: true,
planName: response.data.name,
total: response.data.total_granted / 500000,
used: response.data.total_used / 500000,
remaining: response.data.total_available / 500000,
unit: "USD",
};
}
if (response.error) {
return {
isValid: false,
invalidMessage: response.error.message,
};
}
},
})
这个方式是查询你这个供应商 key 的用量情况,并非是你账号的,如果你的 key 生成时选择的无限额度,那么在 cc-switch 中只会显示这个 key 已经使用的用量,并不会显示剩余的。
其它
还有很多中转站是自研的系统,无法使用上述的方式进行查询,那么就要自己去写对应的查询脚本完成查询,这里我贴一个 88code 的,其它支持查询用量的站点,可以私聊我进行补充。
88code
和方式 2 一样,使用 通用模板 ,在提取器代码输入框中粘贴以下脚本。
({
request: {
url: "{{baseUrl}}/subscription",
method: "POST",
headers: {
Authorization: "Bearer {{apiKey}}",
"User-Agent": "cc-switch/1.0",
Accept: "*/*",
},
},
extractor: function (response) {
if (response.error && response.msg == "No active subscription found") {
throw new Error("该套餐暂无额度可使用");
}
if (response.error && response.msg == "API key not found") {
throw new Error("该KEY无效");
}
const res = response.data // 成功处理:检查响应是否为非空数组 if (Array.isArray(res) && res.length > 0) {
return res.filter(i => i.subscriptionStatus === "活跃中").map((i) => {
let extraInfo = ""; // 初始化 extra 字段变量 // 判断是否有上次重置时间,以此来计算下次刷新时间 // lastCreditReset 字段存在且不为 null if (i.lastCreditReset) {
// 1. 将上次重置时间的字符串转换为 Date 对象 const lastResetDate = new Date(i.lastCreditReset);
// 2. 根据套餐描述,假设是每日重置,计算下次重置时间(加上24小时) // 86400000 毫秒 = 24 * 60 * 60 * 1000 const nextResetDate = new Date(lastResetDate.getTime() + 5*60*60*1000);
// 3. 格式化日期为 "MM-DD HH:MM" const pad = (num) => String(num).padStart(2, "0");
const month = pad(nextResetDate.getMonth() + 1); // 月份是从0开始的,所以+1 const day = pad(nextResetDate.getDate());
const hours = pad(nextResetDate.getHours());
const minutes = pad(nextResetDate.getMinutes());
const formattedNextReset = `${month}-${day } ${hours}:${minutes}`;
// 4. 拼接成最终的字符串
extraInfo = `下次可刷新时间:${formattedNextReset}(${i.resetTimes})`;
}
// 对于按量付费(PAY_PER_USE)类型的套餐,提供特定信息 else if (i.subscriptionPlan.planType === "PAY_PER_USE") {
extraInfo = "按量付费套餐,无固定刷新周期";
}
// 返回包含新字段的完整对象 return {
isValid: true,
planName: i.subscriptionPlan.subscriptionName,
total: i.subscriptionPlan.creditLimit,
remaining: i.currentCredits,
unit: "USD",
extra: extraInfo, // 将生成的 extra 信息添加到返回对象中
};
});
}
},
});





