概述
TooServer 允许通过 API 集成到你程序中,进行查询产品、订单、服务器信息、余额与流水,以及产品下单与续费。
基础地址: https://my.tooserver.net/v1
频率限流:查询类接口 60 次/分钟,下单/续费接口 10 次/分钟。
每日额度:默认每天 20 笔新购订单(续费不计入)。如需提升请联系客服。
创建条件:邮箱已激活 且 有过一次消费记录。 前往申请 API
下单与续费: 仅支持余额扣款 请提前在网站充值。
注意:令牌拥有查询、下单、续费的完整权限,凡涉及下单、续费的接口都会从账户余额扣款。
格式与代码说明
| 请求头(每个请求需携带令牌) | |
|---|---|
| Header | 值 |
Authorization | Bearer ts_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
Content-Type | application/json(POST 请求需要) |
| 响应结构(所有接口返回均为 JSON,UTF-8) | ||
|---|---|---|
| ||
| 字段 | 类型 | 说明 |
code | int | 0 表示成功,非 0 表示错误 |
message | string | 结果描述 |
data | object/null | 返回数据,错误时可能为 null |
| 错误码(HTTP 状态码与 code 对应) | ||
|---|---|---|
| code | HTTP | 说明 |
| 0 | 200 | 成功 |
| 4000 | 400 | 参数错误 |
| 4001 | 400 | 金额/价格异常 |
| 4002 | 400 | 余额不足(订单已创建待付款) |
| 4011–4015 | 401 | 令牌缺失/无效/已吊销/已过期/账户异常 |
| 4031 | 403 | 无操作权限 |
| 4041 | 404 | 资源不存在 |
| 4092 | 409 | 库存不足 |
| 4290 | 429 | 请求过于频繁 |
| 4291 | 429 | 已达每日下单上限 |
| 5001 | 500 | 服务器错误 |
| 限流 / 额度超限返回示例 | ||
| ||
接口
| GET/v1/regions | ||
|---|---|---|
| 说明 | 获取地区列表 | |
| 返回示例 | | |
| GET/v1/products | ||
|---|---|---|
| 说明 | 获取产品列表;代理账户返回中额外包含 agent_price | |
| 参数 | 类型 | 说明(均可选) |
region | int | 地区 ID |
cat | int | 线路/分类 ID |
type | string | 产品类型 |
filter | string | 标签过滤 |
| 示例 | GET /v1/products?region=19&cat=61 | |
| 返回示例 | | |
| POST/v1/orders 会扣余额 | ||
|---|---|---|
| 说明 | 创建订单并用余额支付,价格由服务端计算 | |
| 参数 | 类型 | 说明 |
pricing_id | int | 定价 ID(必填) |
billing_cycle | string | 周期,必填:month / quarter / half_year / year / two_year |
user_remark | string | 备注(可选) |
| 计价 | 普通用户按 sale_price 打折;代理按 agent_price 不打折 | |
| 返回示例 | | |
| 余额不足 | 返回 4002,订单以待付款保留,可在网站充值后支付:
| |
| GET/v1/orders | ||
|---|---|---|
| 说明 | 获取订单列表 | |
| 参数 | 类型 | 说明(均可选) |
status | string | pending / paid / processing / active / cancelled / refunded / upgraded |
page | int | 页码,默认 1 |
limit | int | 每页数量,默认 20,最大 100 |
| 返回示例 | | |
| GET/v1/orders/{order_no} | ||
|---|---|---|
| 说明 | 获取订单详情,仅可查询本人订单 | |
| 返回 | 订单完整字段;不存在或非本人返回 4041 | |
| GET/v1/servers | ||
|---|---|---|
| 说明 | 获取服务器列表,按到期时间升序(临期靠前) | |
| 参数 | 类型 | 说明(均可选) |
status | int | 1 正常 / 0 到期 |
page | int | 页码 |
limit | int | 每页数量 |
| GET/v1/servers/{id} | ||
|---|---|---|
| 说明 | 获取服务器详情 | |
| 返回示例 | | |
| 安全 | 不返回登录密码、IPMI 等任何登录凭证,凭证只能在网站内查看 | |
| POST/v1/servers/{id}/renew 会扣余额 | ||
|---|---|---|
| 说明 | 服务器续费,按挂牌价计算,代理不享受周期折扣,成功后自动延长到期时间 | |
| 参数 | 类型 | 说明 |
billing_cycle | string | 周期(必填) |
| 返回示例 | | |
| GET/v1/account/balance | ||
|---|---|---|
| 说明 | 查询当前余额 | |
| 返回示例 | | |
| GET/v1/account/balance/logs | ||
|---|---|---|
| 说明 | 查询余额变动记录 | |
| 参数 | 类型 | 说明(均可选) |
type | string | income / expense |
page | int | 页码 |
limit | int | 每页数量 |
| 返回 | 每条含金额、类型、来源、变动前后余额、备注、时间 | |
使用流程
典型自动化流程:
1. 网站内充值 → 2. GET /v1/products 查产品 → 3. POST /v1/orders 下单扣款 → 4. GET /v1/orders 查订单状态 → 5. 开通后 GET /v1/servers 查服务器 → 6. 临期时 POST /v1/servers/{id}/renew 续费。
调用示例(以下单为例)
curl -X POST "https://my.tooserver.net/v1/orders" \
-H "Authorization: Bearer 你的令牌" \
-H "Content-Type: application/json" \
-d '{"pricing_id": 2681, "billing_cycle": "month"}'
<?php
$ch = curl_init("https://my.tooserver.net/v1/orders");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer 你的令牌",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"pricing_id" => 2681,
"billing_cycle" => "month",
]),
]);
$resp = curl_exec($ch);
curl_close($ch);
$data = json_decode($resp, true);
if ($data["code"] === 0) {
echo "下单成功:" . $data["data"]["order_no"];
} else {
echo "失败:" . $data["message"];
}
import requests
resp = requests.post(
"https://my.tooserver.net/v1/orders",
headers={
"Authorization": "Bearer 你的令牌",
"Content-Type": "application/json",
},
json={"pricing_id": 2681, "billing_cycle": "month"},
)
data = resp.json()
if data["code"] == 0:
print("下单成功:", data["data"]["order_no"])
else:
print("失败:", data["message"])
const res = await fetch("https://my.tooserver.net/v1/orders", {
method: "POST",
headers: {
"Authorization": "Bearer 你的令牌",
"Content-Type": "application/json",
},
body: JSON.stringify({ pricing_id: 2681, billing_cycle: "month" }),
});
const data = await res.json();
if (data.code === 0) {
console.log("下单成功:", data.data.order_no);
} else {
console.log("失败:", data.message);
}
续费只需把 URL 换成 /v1/servers/{id}/renew,请求体改为 {"billing_cycle": "year"} 即可,其余写法一致。