银行汇率查询:用币种列表接入点做货币下拉框
约 12 分钟 入门银行汇率查询币种列表货币选择器前端开发
# 银行汇率查询:用币种列表接入点做货币下拉框
接口:银行汇率查询(apiCode=105)· 接入点:外汇牌价币种列表(105-35)· 免费(L0 基础版 100 次/天、1 QPS)· 请求方式:POST / GET · 返回格式:JSON · 适用人群:前端开发者、全栈开发者 · 阅读时间:约 4 分钟 · 最后实测核对:2026-09-18
## 核心要点
- 外汇牌价币种列表接入点(105-35)没有业务参数,直接 POST 就能拿到全部可用货币。
- 返回体 `exchange_list` 每项含三个字段:`flag`(国旗图地址)、`name`(货币中文名)、`code`(货币代码)。
- 2026-09-18 实测返回 45 条记录,里面不含人民币;而 105-30 不传参数时返回 46 条,多出来的那条正是 CNY。
## 下拉框的选项从接口取,不写死在代码里
汇率查询页、换算器的货币下拉框,选项列表不该手写。硬编码一份出来,接口以后扩了货币你的页面就对不上。币种列表接入点把当前支持的货币一次性返回,前端拿它渲染即可,后续新增货币不用改代码。
还有一个实战细节:这份列表是「外币」列表。如果你做的是换算器,用户经常要从人民币出发,那就得在渲染下拉框时手工补上 CNY 这一项——2026-09-18 实测的 45 条记录里没有它。
## 接口速览
| 项目 | 说明 |
|------|------|
| 接口地址 | `https://route.showapi.com/105-35?appKey={your_appKey}` |
| 业务参数 | 无 |
| 返回字段 | `exchange_list[].{flag, name, code}`、`ret_code` |
| 请求方式 | POST / GET,同步 |
| 返回条数 | 2026-09-18 实测 45 条 |
| 超时设置 | OpenAPI 文档标注 `x-read-timeout` 30 秒、`x-connect-timeout` 30 秒,比本接口其他接入点更宽 |
## 拉取币种列表的调用代码
Python(requests):
```python
import requests
url = "https://route.showapi.com/105-35"
params = {"appKey": "YOUR_APPKEY"}
try:
# 该接入点的读写超时按文档为 30 秒,比其他接入点更宽
js = requests.post(url, params=params, timeout=30).json()
if js.get("showapi_res_code") == 0 and js["showapi_res_body"].get("ret_code") == 0:
items = js["showapi_res_body"]["exchange_list"]
print("共", len(items), "种货币")
for it in items[:5]:
print(it["code"], it["name"], it["flag"])
else:
print("调用失败:", js.get("showapi_res_error"))
except requests.RequestException as exc:
print("请求异常:", exc)
```
cURL:
```bash
curl -X POST "https://route.showapi.com/105-35?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded"
```
Node.js(fetch):
```javascript
const url = "https://route.showapi.com/105-35?appKey=YOUR_APPKEY";
const res = await fetch(url, {
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
signal: AbortSignal.timeout(30000)
});
const js = await res.json();
if (js.showapi_res_code === 0 && js.showapi_res_body.ret_code === 0) {
console.log("共", js.showapi_res_body.exchange_list.length, "种货币");
} else {
console.error("调用失败:", js.showapi_res_error);
}
```
## 返回示例与解析
以下是 2026-09-18 实测返回的前几条:
```json
{
"showapi_res_error": "",
"showapi_res_code": 0,
"showapi_fee_num": 1,
"showapi_res_body": {
"ret_code": 0,
"exchange_list": [
{ "code": "GBP", "name": "英镑", "flag": "http://res-showapi.oss-cn-hangzhou.aliyuncs.com/exchange/英国国旗.png" },
{ "code": "HKD", "name": "港币", "flag": "http://res-showapi.oss-cn-hangzhou.aliyuncs.com/exchange/香港国旗.png" },
{ "code": "USD", "name": "美元", "flag": "http://res-showapi.oss-cn-hangzhou.aliyuncs.com/exchange/美国国旗.png" },
{ "code": "CHF", "name": "瑞士法郎", "flag": "http://res-showapi.oss-cn-hangzhou.aliyuncs.com/exchange/瑞士国旗.png" }
]
}
}
```
| 字段 | 含义 |
|------|------|
| `flag` | 该货币对应的国旗图片地址 |
| `name` | 货币中文名称 |
| `code` | 货币 ISO 代码 |
| `ret_code` | 0 为成功,其他为失败 |
`flag` 的地址里带中文文件名,直接 `<img src>` 引用即可,但服务端返回的地址可能随时间变化,不建议把它落库存死,按 `code` 关联更稳妥。
## 前端渲染下拉框
```javascript
async function loadCurrencyOptions(selectEl, appKey) {
const res = await fetch(`https://route.showapi.com/105-35?appKey=${appKey}`, {
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
signal: AbortSignal.timeout(30000)
});
const js = await res.json();
if (js.showapi_res_code !== 0 || js.showapi_res_body.ret_code !== 0) throw new Error("币种列表获取失败");
const options = js.showapi_res_body.exchange_list.map(
(it) => `<option value="${it.code}">${it.code} ${it.name}</option>`
);
// 换算器场景:接口返回的是外币列表,人民币需要自行补上
options.unshift('<option value="CNY">CNY 人民币</option>');
selectEl.innerHTML = options.join("");
}
```
两个渲染要点。一是接口里 `name` 用的是银行口径的中文名,与你在界面上惯用的叫法可能略有差别(例如 `CAD` 返回「加拿大元」),展示时以接口返回为准能保证与牌价数据一致。二是 `flag` 是外部图片资源,加载失败时回退成文字代码,别让下拉框出现空白项。
## 缓存与调用频率
货币集合的变动频率远低于牌价,可以在前端或网关侧缓存较长时间,例如一天一次。缓存的同时把 45 条 `code` 集合存下来,用于校验用户输入的货币代码是否合法,避免把无效 `code` 传给 105-30 或 105-31。
## FAQ
**Q1:这个接入点需要传业务参数吗?**
不需要。只带 `appKey` 的 query 参数,直接 POST 或 GET 即可。
**Q2:返回的货币列表和实时查询支持的货币一致吗?**
不完全一致。2026-09-18 实测:本接入点返回 45 条外币记录,不含人民币;105-30 不传 `code` 时返回 46 条,多出的一条是 CNY。做换算器时按下拉框场景自行补上 CNY。
**Q3:`flag` 图片加载失败怎么处理?**
回退到文字代码展示。也可以在本地维护一份 `code` 到国旗资源的映射,减少对远端图片的依赖。
**Q4:这个接入点的超时和其他接入点一样吗?**
不一样。OpenAPI 文档里 105-35 的 `x-read-timeout` 与 `x-connect-timeout` 都是 30 秒,105-30 / 105-31 / 105-34 都是 15 秒。客户端超时按各自的值设置。
**Q5:币种列表要多久刷新一次?**
按业务需要决定。货币集合变动不频繁,缓存一天是常见做法;关键是缓存里同时留着 `code` 集合用于参数校验。
## 下一步阅读
- [银行汇率查询:一份单文件 HTML 就能看实时牌价](https://www.showapi.com/guides/exchange-rate-web-demo-105):把下拉框和牌价表拼成一个可运行的工具。
- [银行汇率查询:5 分钟从注册跑到第一次调用](https://www.showapi.com/guides/exchange-rate-quickstart-105):拿到 `code` 之后怎么发第一次查询。
- [银行汇率查询:汇率转换只需 3 个必填参数](https://www.showapi.com/guides/exchange-rate-convert-guide-105):用下拉框选出的货币代码做金额换算。
- **本系列共 13 篇**:查看[银行汇率查询指南总目录](https://www.showapi.com/guides/exchange-rate-guides-105)





