银行汇率查询:用币种列表接入点做货币下拉框

约 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)
加载中...