能量后结 Developer Center

TRON Energy API

能量交易平台开发文档

为商户出款系统、钱包服务和批量地址运营提供稳定的 TRON 能量租赁接口。本文档采用企业级接入流程组织内容: 先确认账号与价格配置,再选择下单方式,最后按订单号回查结果。

Overview

文档总览

该接口适合服务端系统调用。浏览器端不应保存 API Key 或账号密码,生产环境建议使用服务端中转并统一记录订单号。

Stable v1
Primary Resource ENERGY
Recommended Auth API Key
Order Tracking orderId
接入前准备

请先完成账号注册,并在会员中心确认余额、API Key、订单权限和目标接收地址校验逻辑。所有能量下单接口都需要有效的 TRON 地址。

开放接口

适合外部系统创建能量租赁订单,主要包含 /userInfo/config/pay/payk/orderData

登录后接口

适合会员中心或自有后台使用,统一通过 token 请求头传递登录态,主要包含用户资料、地址管理、订单列表和 API Key 管理。

Step 01 查询账户

调用 /userInfo 确认账号状态和余额。

Step 02 读取配置

调用 /config 拉取价格和下单参数。

Step 03 创建订单

生产环境优先使用 /payk 创建资源租赁订单。

Quick Start

快速开始

推荐从服务端发起请求,统一处理超时、异常、余额不足和订单状态同步。

最小化下单流程
1. 调用 /userInfo 查询账户余额和状态
2. 调用 /config 获取价格、资源类型和租用参数
3. 调用 /payk 提交 ENERGY 租用订单
4. 保存响应中的 orderId
5. 调用 /orderData 查询订单结果
基础地址

示例基础地址为 https://{your-api-domain}/v1。实际生产域名请以你后台分配的接口地址为准。

推荐请求头

Content-Type: application/json。如果接入的是登录后用户中心接口,则推荐使用 application/x-www-form-urlencoded 并在 Header 里带 token

生产要求

API Key、账号密码和 token 只能放在服务端。浏览器、App、前端页面不应直接保存长期密钥。

Authentication

鉴权与 Token

开放下单接口推荐使用 API Key;登录后用户中心接口使用 FastAdmin token。两种鉴权不要混用。

API Key 鉴权

用于 /payk 等服务端下单场景。请求体传 key 字段,不需要登录 token。

Token 鉴权

用于 /api/user/* 登录后接口。登录成功后从 data.userinfo.token 取值,并通过 Header token 传递。

Login

API 登录获取 Token

适合服务端或自有后台获取当前用户登录态,后续用于调用登录后接口。

POST /api/user/login
Content-Typeapplication/x-www-form-urlencoded
Auth无需 token
Timeout15 秒建议值
Token TTL通常 30 天
字段类型必填说明示例
accountstring用户名、邮箱或手机号,取决于后台账号配置。demo
passwordstring登录密码。demo123456
请求示例
curl -X POST "https://{your-api-domain}/api/user/login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "account=demo&password=demo123456"
成功响应
{
  "code": 1,
  "msg": "Logged in successful",
  "time": 1710000000,
  "data": {
    "userinfo": {
      "id": 10001,
      "username": "demo",
      "nickname": "demo",
      "token": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "expiretime": 1712592000,
      "expires_in": 2592000
    }
  }
}
失败响应
{
  "code": 0,
  "msg": "Account or password is incorrect",
  "time": 1710000000,
  "data": null
}

Rules

响应与错误码

所有接口都应先判断 HTTP 状态,再判断响应体 code。业务成功只以 code = 1 为准。

字段 类型 说明 处理建议
codenumber1 成功;0 普通业务失败;401 未登录;403 无权限。只在 code=1 时进入成功逻辑。
msgstring服务端提示信息,失败时通常包含可展示原因。可用于后台日志和用户提示。
timenumber服务端 Unix 时间戳,部分开放接口可能不返回。用于排查请求时间和日志对齐。
dataobject / array / null业务数据。失败时可能为 null 或空对象。必须做空值保护。
统一成功响应
{
  "code": 1,
  "msg": "请求成功",
  "time": 1710000000,
  "data": {
    "orderId": "202606260001",
    "status": "success"
  }
}
统一失败响应
{
  "code": 0,
  "msg": "余额不足",
  "time": 1710000000,
  "data": null
}
错误类型典型 code / msg常见原因客户端处理
参数错误code=0 / 参数错误缺少必填字段、地址格式错误、数量不合法。拦截请求并提示开发者修正字段。
余额不足code=0 / 余额不足账户余额低于本次订单费用。停止重试,引导充值或降低订单数量。
未登录code=401 / Please login firsttoken 缺失、过期或被退出登录。重新登录获取 token。
无权限code=403账号权限、接口权限或资源归属不匹配。记录日志并联系管理员核对权限。
上游异常HTTP 5xx 或 code=0链上拥堵、资源不足或服务端短时异常。使用退避重试,避免高频重复下单。

下单接口必须保存原始请求、原始响应、业务订单号和平台订单号。失败重试前应先用 /orderData 回查,避免重复扣费或重复发能量。

Account

查询账户

用于读取用户基础信息、状态和余额。

GET POST /userInfo
URL/v1/userInfo
MethodGET / POST
Authusername
Use Case下单前余额校验
参数类型必填说明示例
usernamestring平台用户账号,用于定位账户余额和状态。demo
请求示例
{
  "username": "demo"
}
响应示例
{
  "code": 1,
  "msg": "请求成功",
  "data": {
    "username": "demo",
    "status": "normal",
    "balance": "128.560000",
    "level": 1,
    "experience": 35,
    "apiKeyCount": 2
  }
}
响应字段类型说明
data.usernamestring账户名。
data.statusstring账户状态,常见为 normal,实际以后台返回为准。
data.balancestring / number账户余额。建议前端按字符串展示,服务端计算时转高精度数值。
data.levelnumber会员等级。
data.experiencenumber经验值或成长值。
失败响应
{
  "code": 0,
  "msg": "用户不存在或账户不可用",
  "data": null
}

Pricing

查询价格等其他下单参数

在下单前读取价格、租用参数和其他业务配置。

GET POST /config
URL/v1/config
MethodGET / POST
Authusername
Use Case价格与下单参数
参数类型必填说明示例
usernamestring平台用户账号,不同账号可能对应不同价格和权限。demo
请求示例
{
  "username": "demo"
}
响应示例
{
  "code": 1,
  "msg": "请求成功",
  "data": {
    "resTypes": ["ENERGY", "BANDWIDTH"],
    "rentTimes": [
      { "value": "1", "label": "1 小时", "unit": "hour" },
      { "value": "1D", "label": "1 天", "unit": "day" }
    ],
    "energyOptions": [
      { "payNums": "32000", "label": "32,000 Energy" },
      { "payNums": "65000", "label": "65,000 Energy" },
      { "payNums": "130000", "label": "130,000 Energy" }
    ],
    "resLockOptions": [
      { "value": "0", "label": "不锁定" },
      { "value": "1", "label": "锁定" }
    ],
    "price": {
      "currency": "TRX",
      "energyUnitPrice": "0.0000339",
      "bandwidthUnitPrice": "0.000001"
    }
  }
}
响应字段类型说明
data.resTypesarray允许下单的资源类型,常见为 ENERGYBANDWIDTH
data.rentTimesarray允许的租用时长。前端应使用返回值渲染选项,不要硬编码。
data.energyOptionsarray推荐能量数量。实际可下单数量仍需以后端校验为准。
data.resLockOptionsarray资源锁定选项,0 不锁定,1 锁定。
data.priceobject价格相关配置。字段可能按账号权限扩展,接入方应保留未知字段。
失败响应
{
  "code": 0,
  "msg": "未找到账号配置",
  "data": null
}

Member APIs

登录后用户中心接口

这组接口适合会员中心、自有后台或代理系统使用。必须先通过登录接口获取 token,并在后续请求 Header 中传递。

Base URLhttps://{your-api-domain}/api
Auth Headertoken: xxxxx
POST Formatapplication/x-www-form-urlencoded
Paginationpage=1
接口方法参数data 返回说明
/api/user/getuserinfoGETbalancelevelexperience获取当前用户余额、等级和成长数据。
/api/user/getRechargeAddressGETaddress获取当前用户专属充值地址。
/api/user/profilePOSTusername?nickname?address?bio?avatar?null更新个人资料;地址需为有效 TRON 地址。
/api/user/getAddressListGETpagelist 分页对象查询能量预设地址列表。
/api/user/addAddressPOST见地址字段规范null新增能量预设地址。
/api/user/editAddressPOSTid + 地址字段null编辑能量预设地址。
/api/user/getSfaddressListGETpagelist 分页对象查询转租地址列表。
/api/user/getApikeylistGETpagelist 分页对象查询 API Key 列表。
/api/user/generateApiKeyGETnameuser_idnamekey生成 API Key,单用户通常最多 5 个。
/api/user/getEnergylistGETpagekeyword?status?startTime?endTime?list 分页对象查询能量订单,支持状态和时间过滤。
/api/user/getPaylistGETpagelist 分页对象查询账户收支流水。
/api/user/getPromotionClientsGETpageinumtnumsumlist查询推广客户和佣金统计。

地址字段规范

  • address:T 开头 34 位 TRON 地址,必填。
  • remark:备注名称,可选。
  • engjson:能量预设 JSON 字符串,例如 {"2000000":"32000"}
  • status:运行状态,0 关闭,1 开启。
  • bswitchpswitchuswitchxswitcheswitch:检测策略开关。

分页对象规范

  • data.list.total:总记录数。
  • data.list.per_page:每页数量。
  • data.list.current_page:当前页码。
  • data.list.last_page:最后页码。
  • data.list.data:当前页数组。
查询用户信息
curl -X GET "https://{your-api-domain}/api/user/getuserinfo" \
  -H "token: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
新增转租地址
curl -X POST "https://{your-api-domain}/api/user/addSfaddress" \
  -H "token: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "name=渠道A&address=TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ&min=0.1&max=10&energy=65000&status=1"
分页成功响应
{
  "code": 1,
  "msg": "请求成功",
  "time": 1710000000,
  "data": {
    "list": {
      "total": 12,
      "per_page": 10,
      "current_page": 1,
      "last_page": 2,
      "data": []
    }
  }
}
未登录失败响应
{
  "code": 401,
  "msg": "Please login first",
  "time": 1710000000,
  "data": null
}

Order

租用资源下单用户名密码版

适合人工业务系统或需要直接走账号密码的接入方式。

POST /pay
URL/v1/pay
MethodPOST
Authusername + password
Idempotency保存 orderId 后回查
参数类型必填约束说明
usernamestring已注册账号用户名。
passwordstring账号密码用户密码。生产环境不推荐长期使用该模式。
resTypestringENERGY / BANDWIDTH资源类型。
payNumsstring / number正整数,常见 3200065000130000租用数量。
rentTimestring / number按配置接口返回值提交租用时长。
resLockstring / number010 不锁定,1 锁定。
receiveAddressstringT 开头 34 位 TRON 地址接收资源地址,不能填写合约地址。
请求示例
{
  "username": "demo",
  "password": "demo123456",
  "resType": "ENERGY",
  "payNums": "65000",
  "rentTime": "1",
  "resLock": "0",
  "receiveAddress": "TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ"
}
响应示例
{
  "code": 1,
  "msg": "下单成功",
  "data": {
    "orderId": "202606260001",
    "balance": "126.390000",
    "orderMoney": "2.170000",
    "resType": "ENERGY",
    "payNums": "65000",
    "receiveAddress": "TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ",
    "status": "processing"
  }
}
响应字段类型说明
data.orderIdstring / number平台订单号,必须落库保存。
data.balancestring / number下单后的账户余额。
data.orderMoneystring / number本次订单扣费金额。
data.statusstring订单状态,创建成功后可能仍处于处理中,应继续回查。
失败响应
{
  "code": 0,
  "msg": "余额不足",
  "data": {
    "balance": "0.320000",
    "required": "2.170000"
  }
}

用户名密码版会暴露账号密码给调用服务,建议仅用于受控后台或过渡接入。商业化系统优先使用 /payk

Recommended

租用资源下单 API Key 版

推荐服务端或商业系统接入使用,权限隔离更清晰,也更利于长期维护。

POST /payk
URL/v1/payk
MethodPOST
AuthAPI Key
Recommended服务端生产接入
参数类型必填约束说明
keystring会员中心生成API Key。请只保存在服务端。
resTypestringENERGY / BANDWIDTH资源类型。
payNumsstring / number正整数租用数量。USDT 普通转账常用估算可按 65000 起。
rentTimestring / number/config 返回值提交租用时长。
resLockstring / number01资源锁定。多数临时转账场景用 0
receiveAddressstringT 开头 34 位 TRON 地址接收资源地址。
clientOrderNostring64 字符内如后端支持,建议传入业务侧订单号用于对账;不支持时后端可能不会保存该字段。
请求示例
{
  "key": "YOUR_API_KEY",
  "resType": "ENERGY",
  "payNums": "65000",
  "rentTime": "1",
  "resLock": "0",
  "receiveAddress": "TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ",
  "clientOrderNo": "PAYOUT-20260626-0001"
}
响应示例
{
  "code": 1,
  "msg": "下单成功",
  "data": {
    "orderId": "202606260001",
    "balance": "126.390000",
    "orderMoney": "2.170000",
    "resType": "ENERGY",
    "payNums": "65000",
    "rentTime": "1",
    "resLock": "0",
    "receiveAddress": "TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ",
    "status": "processing"
  }
}
响应字段类型说明
data.orderIdstring / number平台订单号。必须保存,用于回查订单状态和对账。
data.balancestring / number扣费后的账户余额。
data.orderMoneystring / number本次订单金额。
data.receiveAddressstring资源接收地址。
data.statusstring订单状态。创建成功不代表链上最终完成,建议继续调用 /orderData
cURL 示例
curl -X POST "https://{your-api-domain}/v1/payk" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "YOUR_API_KEY",
    "resType": "ENERGY",
    "payNums": "65000",
    "rentTime": "1",
    "resLock": "0",
    "receiveAddress": "TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ",
    "clientOrderNo": "PAYOUT-20260626-0001"
  }'
失败响应
{
  "code": 0,
  "msg": "API Key 无效或余额不足",
  "data": null
}

网络超时不等于下单失败。调用方应先按业务单号或已保存的 orderId 回查,再决定是否重试。

Order Lookup

获取订单信息

按订单 ID 查询订单详情,适合在下单后轮询订单状态或回查业务结果。

POST /orderData
URL/v1/orderData
MethodPOST
Authusername + orderId
Polling3-5 秒间隔
参数类型必填说明示例
usernamestring用户名。demo
orderIdstring / number下单成功后返回的平台订单号。202606260001
请求示例
{
  "username": "demo",
  "orderId": "202606260001"
}
响应示例
{
  "code": 1,
  "msg": "请求成功",
  "data": {
    "orderId": "202606260001",
    "clientOrderNo": "PAYOUT-20260626-0001",
    "status": "success",
    "statusText": "已完成",
    "resType": "ENERGY",
    "payNums": "65000",
    "rentTime": "1",
    "resLock": "0",
    "receiveAddress": "TUR3i6owz3iqqWpZkqANgEo4xCEFbD1CtQ",
    "orderMoney": "2.170000",
    "txid": "9f6b...d21a",
    "createdAt": "2026-06-26 15:40:01",
    "finishedAt": "2026-06-26 15:40:12"
  }
}
响应字段类型说明
data.orderIdstring / number平台订单号。
data.statusstring订单状态,常见值可按 processingsuccessfailed 兼容处理,实际以返回为准。
data.statusTextstring订单状态中文说明,可用于后台展示。
data.txidstring链上交易哈希。部分处理中或失败订单可能为空。
data.finishedAtstring完成时间。未完成时可能为空。
失败响应
{
  "code": 0,
  "msg": "订单不存在",
  "data": null
}

建议轮询间隔 3-5 秒,最长轮询 60-120 秒。超过业务等待时间仍未完成时,应进入人工补偿或后台队列,不要无限高频请求。

Server Example

Axios 服务端示例

示例展示了在 Node 服务端封装 API 客户端的基础方式。生产环境应从环境变量读取 API Key。

JavaScript / Axios
import axios from 'axios'

const client = axios.create({
  baseURL: 'https://{your-api-domain}/v1',
  timeout: 15000,
})

function assertApiSuccess(response) {
  if (!response || response.code !== 1) {
    const message = response?.msg || 'API request failed'
    const error = new Error(message)
    error.response = response
    throw error
  }

  return response.data
}

export async function createEnergyOrder(receiveAddress, clientOrderNo) {
  const { data } = await client.post('/payk', {
    key: process.env.TRON_ENERGY_API_KEY,
    resType: 'ENERGY',
    payNums: '65000',
    rentTime: '1',
    resLock: '0',
    receiveAddress,
    clientOrderNo,
  })

  return assertApiSuccess(data)
}

export async function getOrderData(username, orderId) {
  const { data } = await client.post('/orderData', {
    username,
    orderId,
  })

  return assertApiSuccess(data)
}

Launch Checklist

上线检查清单

上线前请确认密钥、余额、地址校验、订单保存和异常处理均已完成。

检查项 要求 建议
密钥保存API Key 只保存在服务端使用环境变量或密钥管理系统
地址校验下单前校验 TRON 地址格式避免合约地址、空地址和明显错误地址
余额检查下单前确认账户余额余额不足时提前拦截业务请求
订单落库保存 orderId 与业务单号便于后续对账、补偿和排障
异常处理统一处理 code 与 msg记录原始响应和请求上下文