Skip to content

本文档包含用户基础信息查询与订阅套餐详情的接口调用说明及前端数据处理代码。

公共基础信息

  • Base URL: https://ai.7code.cc
  • 通用请求头 (Headers):
    • Authorization: Bearer (用户访问 Token)
    • new-api-user: (用户ID)
    • Content-Type: application/json

一、查询用户余额用量

该接口用于获取用户当前的账户状态、剩余额度及已用额度等基础信息。

  • 接口地址: /api/user/self
  • 请求方式: GET

JavaScript 调用与解析代码

javascript
const BASE_URL = 'https://ai.7code.cc';
const accessToken = '你的AccessToken'; // 替换为实际Token
const userId = '你的UserId';           // 替换为实际用户ID

/**
 * 获取并解析用户基础信息
 */
async function fetchUserInfo() {
  try {
    const response = await fetch(`${BASE_URL}/api/user/self`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${accessToken}`,
        'New-Api-User': userId
      }
    });

    const data = await response.json();
    return parseUserInfo(data);
  } catch (error) {
    console.error('请求用户信息失败:', error);
    return { isValid: false, invalidMessage: '网络请求异常' };
  }
}

/**
 * 解析用户信息接口返回的数据
 */
function parseUserInfo(response) {
  if (response.success && response.data) {
    return {
      planName: response.data.group || "默认套餐",
      // 额度换算:原数值除以 500000
      remaining: response.data.quota / 500000,
      used: response.data.used_quota / 500000,
      total: (response.data.quota + response.data.used_quota) / 500000,
      unit: "USD"
    };
  }
  return {
    isValid: false,
    invalidMessage: response.message || "查询失败"
  };
}

二、查询订阅套餐详情

该接口用于获取用户当前激活的订阅套餐详情,包含套餐ID、状态、有效期以及具体的额度使用情况。

  • 接口地址: /api/subscription/self
  • 请求方式: GET (根据 curl 示例推断)

JavaScript 调用与解析代码

javascript
/**
 * 获取并解析订阅套餐详情
 */
async function fetchSubscriptionDetail() {
  try {
    const response = await fetch(`${BASE_URL}/api/subscription/self`, {
      method: 'GET',
      headers: {
        'accept': 'application/json',
        'Authorization': `Bearer ${accessToken}`,
        'new-api-user': userId,
      }
    });

    const data = await response.json();
    return parseSubscriptionDetail(data);
  } catch (error) {
    console.error('请求订阅详情失败:', error);
    return { isValid: false, invalidMessage: '网络请求异常' };
  }
}

/**
 * 辅助函数:将秒级时间戳转换为正常日期格式 (YYYY-MM-DD HH:mm:ss)
 */
function formatTimestamp(timestamp) {
  if (!timestamp) return "未知";
  const date = new Date(timestamp * 1000);
  return date.toLocaleString('zh-CN', { hour12: false }); 
}

/**
 * 解析订阅详情接口返回的数据
 */
function parseSubscriptionDetail(response) {
  // 提取当前激活的套餐 (subscriptions 数组中的第一项)
  if (response.success && response.data && response.data.subscriptions && response.data.subscriptions.length > 0) {
    const sub = response.data.subscriptions[0].subscription;

    return {
      planId: sub.plan_id,                // 套餐ID
      status: sub.status,                 // 套餐状态 (如 active)
      startTime: formatTimestamp(sub.start_time), // 开始时间
      endTime: formatTimestamp(sub.end_time),     // 到期时间
      // 额度换算:原数值除以 500000,保留两位小数
      totalAmount: (sub.amount_total / 500000).toFixed(2), 
      usedAmount: (sub.amount_used / 500000).toFixed(2)   
    };
  } 
  return {
    isValid: false,
    invalidMessage: response.message || "未找到当前激活的套餐"
  };
}

💡 核心数据处理说明

  1. 额度换算比例:两个接口中的额度字段(如 quota, amount_total 等)均需要 除以 500000 才能得到实际展示的金额/额度。
  2. 时间戳处理:订阅接口返回的时间戳(start_time, end_time)为 秒级,在 JavaScript 中需乘以 1000 转换为毫秒级后再进行日期格式化。
  3. 数据优先级:订阅接口中,subscriptions 字段代表当前激活的套餐,解析时优先取该数组的第一项数据。