TRON Energy API
能量交易平台开发文档
为商户出款系统、钱包服务和批量地址运营提供稳定的 TRON 能量租赁接口。本文档采用企业级接入流程组织内容: 先确认账号与价格配置,再选择下单方式,最后按订单号回查结果。
Overview
文档总览
该接口适合服务端系统调用。浏览器端不应保存 API Key 或账号密码,生产环境建议使用服务端中转并统一记录订单号。
请先完成账号注册,并在会员中心确认余额、API Key、订单权限和目标接收地址校验逻辑。所有能量下单接口都需要有效的 TRON 地址。
开放接口
适合外部系统创建能量租赁订单,主要包含 /userInfo、/config、/pay、/payk、/orderData。
登录后接口
适合会员中心或自有后台使用,统一通过 token 请求头传递登录态,主要包含用户资料、地址管理、订单列表和 API Key 管理。
调用 /userInfo 确认账号状态和余额。
调用 /config 拉取价格和下单参数。
生产环境优先使用 /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
适合服务端或自有后台获取当前用户登录态,后续用于调用登录后接口。
| 字段 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| account | string | 是 | 用户名、邮箱或手机号,取决于后台账号配置。 | demo |
| password | string | 是 | 登录密码。 | 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 为准。
| 字段 | 类型 | 说明 | 处理建议 |
|---|---|---|---|
| code | number | 1 成功;0 普通业务失败;401 未登录;403 无权限。 | 只在 code=1 时进入成功逻辑。 |
| msg | string | 服务端提示信息,失败时通常包含可展示原因。 | 可用于后台日志和用户提示。 |
| time | number | 服务端 Unix 时间戳,部分开放接口可能不返回。 | 用于排查请求时间和日志对齐。 |
| data | object / 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 first | token 缺失、过期或被退出登录。 | 重新登录获取 token。 |
| 无权限 | code=403 | 账号权限、接口权限或资源归属不匹配。 | 记录日志并联系管理员核对权限。 |
| 上游异常 | HTTP 5xx 或 code=0 | 链上拥堵、资源不足或服务端短时异常。 | 使用退避重试,避免高频重复下单。 |
下单接口必须保存原始请求、原始响应、业务订单号和平台订单号。失败重试前应先用 /orderData 回查,避免重复扣费或重复发能量。
Account
查询账户
用于读取用户基础信息、状态和余额。
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| username | string | 是 | 平台用户账号,用于定位账户余额和状态。 | demo |
{
"username": "demo"
}
{
"code": 1,
"msg": "请求成功",
"data": {
"username": "demo",
"status": "normal",
"balance": "128.560000",
"level": 1,
"experience": 35,
"apiKeyCount": 2
}
}
| 响应字段 | 类型 | 说明 |
|---|---|---|
| data.username | string | 账户名。 |
| data.status | string | 账户状态,常见为 normal,实际以后台返回为准。 |
| data.balance | string / number | 账户余额。建议前端按字符串展示,服务端计算时转高精度数值。 |
| data.level | number | 会员等级。 |
| data.experience | number | 经验值或成长值。 |
{
"code": 0,
"msg": "用户不存在或账户不可用",
"data": null
}
Pricing
查询价格等其他下单参数
在下单前读取价格、租用参数和其他业务配置。
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| username | string | 是 | 平台用户账号,不同账号可能对应不同价格和权限。 | 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.resTypes | array | 允许下单的资源类型,常见为 ENERGY 和 BANDWIDTH。 |
| data.rentTimes | array | 允许的租用时长。前端应使用返回值渲染选项,不要硬编码。 |
| data.energyOptions | array | 推荐能量数量。实际可下单数量仍需以后端校验为准。 |
| data.resLockOptions | array | 资源锁定选项,0 不锁定,1 锁定。 |
| data.price | object | 价格相关配置。字段可能按账号权限扩展,接入方应保留未知字段。 |
{
"code": 0,
"msg": "未找到账号配置",
"data": null
}
Member APIs
登录后用户中心接口
这组接口适合会员中心、自有后台或代理系统使用。必须先通过登录接口获取 token,并在后续请求 Header 中传递。
| 接口 | 方法 | 参数 | data 返回 | 说明 |
|---|---|---|---|---|
| /api/user/getuserinfo | GET | 无 | balance、level、experience | 获取当前用户余额、等级和成长数据。 |
| /api/user/getRechargeAddress | GET | 无 | address | 获取当前用户专属充值地址。 |
| /api/user/profile | POST | username?、nickname?、address?、bio?、avatar? | null | 更新个人资料;地址需为有效 TRON 地址。 |
| /api/user/getAddressList | GET | page | list 分页对象 | 查询能量预设地址列表。 |
| /api/user/addAddress | POST | 见地址字段规范 | null | 新增能量预设地址。 |
| /api/user/editAddress | POST | id + 地址字段 | null | 编辑能量预设地址。 |
| /api/user/getSfaddressList | GET | page | list 分页对象 | 查询转租地址列表。 |
| /api/user/getApikeylist | GET | page | list 分页对象 | 查询 API Key 列表。 |
| /api/user/generateApiKey | GET | name | user_id、name、key | 生成 API Key,单用户通常最多 5 个。 |
| /api/user/getEnergylist | GET | page、keyword?、status?、startTime?、endTime? | list 分页对象 | 查询能量订单,支持状态和时间过滤。 |
| /api/user/getPaylist | GET | page | list 分页对象 | 查询账户收支流水。 |
| /api/user/getPromotionClients | GET | page | inum、tnum、sum、list | 查询推广客户和佣金统计。 |
地址字段规范
address:T 开头 34 位 TRON 地址,必填。remark:备注名称,可选。engjson:能量预设 JSON 字符串,例如{"2000000":"32000"}。status:运行状态,0关闭,1开启。bswitch、pswitch、uswitch、xswitch、eswitch:检测策略开关。
分页对象规范
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
租用资源下单用户名密码版
适合人工业务系统或需要直接走账号密码的接入方式。
| 参数 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|
| username | string | 是 | 已注册账号 | 用户名。 |
| password | string | 是 | 账号密码 | 用户密码。生产环境不推荐长期使用该模式。 |
| resType | string | 是 | ENERGY / BANDWIDTH | 资源类型。 |
| payNums | string / number | 是 | 正整数,常见 32000、65000、130000 | 租用数量。 |
| rentTime | string / number | 是 | 按配置接口返回值提交 | 租用时长。 |
| resLock | string / number | 是 | 0 或 1 | 0 不锁定,1 锁定。 |
| receiveAddress | string | 是 | T 开头 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.orderId | string / number | 平台订单号,必须落库保存。 |
| data.balance | string / number | 下单后的账户余额。 |
| data.orderMoney | string / number | 本次订单扣费金额。 |
| data.status | string | 订单状态,创建成功后可能仍处于处理中,应继续回查。 |
{
"code": 0,
"msg": "余额不足",
"data": {
"balance": "0.320000",
"required": "2.170000"
}
}
用户名密码版会暴露账号密码给调用服务,建议仅用于受控后台或过渡接入。商业化系统优先使用 /payk。
Recommended
租用资源下单 API Key 版
推荐服务端或商业系统接入使用,权限隔离更清晰,也更利于长期维护。
| 参数 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|
| key | string | 是 | 会员中心生成 | API Key。请只保存在服务端。 |
| resType | string | 是 | ENERGY / BANDWIDTH | 资源类型。 |
| payNums | string / number | 是 | 正整数 | 租用数量。USDT 普通转账常用估算可按 65000 起。 |
| rentTime | string / number | 是 | 按 /config 返回值提交 | 租用时长。 |
| resLock | string / number | 是 | 0 或 1 | 资源锁定。多数临时转账场景用 0。 |
| receiveAddress | string | 是 | T 开头 34 位 TRON 地址 | 接收资源地址。 |
| clientOrderNo | string | 否 | 64 字符内 | 如后端支持,建议传入业务侧订单号用于对账;不支持时后端可能不会保存该字段。 |
{
"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.orderId | string / number | 平台订单号。必须保存,用于回查订单状态和对账。 |
| data.balance | string / number | 扣费后的账户余额。 |
| data.orderMoney | string / number | 本次订单金额。 |
| data.receiveAddress | string | 资源接收地址。 |
| data.status | string | 订单状态。创建成功不代表链上最终完成,建议继续调用 /orderData。 |
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 查询订单详情,适合在下单后轮询订单状态或回查业务结果。
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| username | string | 是 | 用户名。 | demo |
| orderId | string / 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.orderId | string / number | 平台订单号。 |
| data.status | string | 订单状态,常见值可按 processing、success、failed 兼容处理,实际以返回为准。 |
| data.statusText | string | 订单状态中文说明,可用于后台展示。 |
| data.txid | string | 链上交易哈希。部分处理中或失败订单可能为空。 |
| data.finishedAt | string | 完成时间。未完成时可能为空。 |
{
"code": 0,
"msg": "订单不存在",
"data": null
}
建议轮询间隔 3-5 秒,最长轮询 60-120 秒。超过业务等待时间仍未完成时,应进入人工补偿或后台队列,不要无限高频请求。
Server Example
Axios 服务端示例
示例展示了在 Node 服务端封装 API 客户端的基础方式。生产环境应从环境变量读取 API Key。
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 | 记录原始响应和请求上下文 |