我踩了个坑:用 CoinGecko 查 TON 价格居然查不到


最近在做加密支付 / 风控相关的东西,本来只是想查一下 TON 的价格,结果踩了个挺典型的坑,顺手整理一下。


一、事情是怎么开始的?

我一开始用的是 CoinGecko 的接口:

https://api.coingecko.com/api/v3/simple/price?ids=toncoin&vs_currencies=usd

逻辑很简单:

  • 币叫 Toncoin
  • symbol 是 TON
  • 那 id 不就是 toncoin 吗?

👉 结果:返回空 {}

当时第一反应是:

  • API 挂了?
  • 被限流了?
  • 网络问题?

折腾了一圈发现——都不是。


二、真正的问题在哪?

问题其实很简单,但也很坑:

CoinGecko 查价格用的是 id,而这个 id 不是你以为的那个

对于 TON 来说:

id ≠ toncoin

而是:

the-open-network

三、为什么这么奇怪?

因为 TON 的历史比较“乱”:

  • 一开始叫:Telegram Open Network
  • 后来改名:The Open Network

CoinGecko 的 id 是按“项目名”来的,不是按 symbol。

所以就变成了:

字段
nameToncoin
symbolTON
idthe-open-network

四、正确写法

把接口改成这样就行了:

https://api.coingecko.com/api/v3/simple/price?ids=the-open-network&vs_currencies=usd

👉 立马就有数据了


五、这个坑本质是什么?

总结一下就是:

你不能“猜 CoinGecko 的 id”

很多人(包括我)会下意识写:

ids=toncoin

但其实:

  • 有些币 id 跟名字一样
  • 有些完全不一样
  • 没有统一规则

六、正确姿势

方法1:查官方列表
https://api.coingecko.com/api/v3/coins/list

自己做一个映射:

symbol → id

方法2:本地维护一份(推荐)

比如:

TON → the-open-network
BTC → bitcoin
ETH → ethereum

七、后来我直接换了方案

说实话,这个问题让我有点不爽,于是我直接换成用 Binance。

用法简单很多:

https://api.binance.com/api/v3/ticker/price?symbol=TONUSDT

返回:

{
  "symbol": "TONUSDT",
  "price": "5.23"
}

👉 非常直观:

1 TON = 多少 USDT


八、两种方案对比
方式体验
CoinGecko覆盖广,但 id 很坑
Binance简单直接,但只支持已上线交易对

九、一个我觉得很重要的经验

如果你是在做:

  • 支付
  • 风控
  • 资产系统

👉 一定不要只用一个数据源


我现在的做法
价格服务:
    ├── Binance(主)
    ├── CoinGecko(备)

原因:

  • Binance:实时交易价格,最稳
  • CoinGecko:补充长尾币

十、还有一个小坑(容易忽略)

Binance 返回的是:

"price": "5.23"

👉 字符串,不是数字

如果你直接算:

  • 可能会出精度问题

👉 建议用 decimal 处理


十一、总结一下

这次其实不是 API 的问题,而是:

不同平台的“标识体系不一样”


最重要三点

  1. TON 在 CoinGecko 的 id 是:the-open-network
  2. 在 Binance 用:TONUSDT
  3. 不要用 symbol 当唯一标识

最后一句

这个坑不大,但如果你在做资金系统:

👉 可能会变成很大的坑(比如价格算错)

所以还是早点填掉比较好。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注