标签 JavaScript脚本 下的文章

效果图

先上个效果图

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 信息添加到返回对象中
        };
      });
    }
  },
});

📌 转载信息
转载时间:
2026/1/12 10:34:08