适用场景与接口能力边界
实时汇率查询API适用于任何需要货币转换的场景:跨境电商平台(展示商品多币种用量说明)、旅行规划工具(估算当地费用)、财务分析系统(多币种报表)、个人记账软件等。接口提供26种主流货币(CNY、USD、EUR、GBP、JPY、HKD、KRW、AUD、CAD、SGD、CHF、TWD、THB、MYR、RUB、INR、BRL、ZAR、NZD、SEK、NOK、DKK、PHP、IDR、VND、AED)之间的实时互转,数据1分钟级更新,响应时间在毫秒级别。
能力边界:
- QPS:5次/秒
- 支持同币种快路径:当from和to为相同货币时,本地直接返回结果,不消耗上游资源。
- 货币列表查询:通过
action=currencies子命令,无需鉴权即可获取全部支持货币的代码与中文名,可用来动态生成下拉选择器。 - 调用限制:匿名调用每日有50次调用额度;携带有效API Key可提升额度(具体以文档为准)。
请求参数详解
接口使用GET方法,地址为 https://v1.apizero.cn/api/exchange-rate,所有参数均为Query String形式。
| 参数名 | 是否必填 | 类型 | 说明 | 默认值 | 示例值 |
|---|---|---|---|---|---|
| money | 否 | number | 要转换的金额,必须大于0 | 1 | 100 |
| from | 否 | string | 源货币代码(ISO 4217三字母) | CNY | CNY |
| to | 否 | string | 目标货币代码(ISO 4217三字母) | USD | USD |
| action | 否 | string | 传 currencies 返回支持货币列表,忽略其他参数 | 无 | currencies |
注意:
- 货币代码不区分大小写,但建议统一使用大写。
action=currencies是一个独立功能,此时不进行汇率换算,直接返回所有支持货币的列表(包含code和name_cn字段)。此操作不消耗调用配额。
鉴权方式
请求支持两种调用模式:
- 匿名调用:不携带任何鉴权头,每日可调用50次。
- 授权调用:在HTTP头部添加
Authorization,格式为Bearer sk_live_xxxxxxxxxxxxxx(具体Key需从服务商获取)。携带Key后调用次数更高,具体以服务商文档为准。
接入示例:cURL
以下提供两个可复制示例(测试时请替换为真实金额或货币代码)。
匿名调用(1 CNY 兑换 USD)
curl -sS -X GET \
"https://v1.apizero.cn/api/exchange-rate?money=1&from=CNY&to=USD"
携带 Authorization 头的调用(100 USD 兑换 JPY)
curl -sS -X GET \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
"https://v1.apizero.cn/api/exchange-rate?money=100&from=USD&to=JPY"
获取支持货币列表
curl -sS -X GET \
"https://v1.apizero.cn/api/exchange-rate?action=currencies"
接入示例:Python(requests库)
import requests
# 配置参数
url = "https://v1.apizero.cn/api/exchange-rate"
params = {
"money": 1,
"from": "CNY",
"to": "USD"
}
# 匿名调用
resp = requests.get(url, params=params)
data = resp.json()
if data.get("code") == 0:
print(f"{data['data']['money']} {data['data']['from_name']} = {data['data']['result']} {data['data']['to_name']}")
print(f"汇率更新时间:{data['data']['update_time']}")
else:
print(f"错误:{data.get('msg')}")
# 如需鉴权,添加headers
# headers = {"Authorization": "Bearer sk_live_xxxxxxxxxxxxxx"}
# resp = requests.get(url, params=params, headers=headers)
接入示例:JavaScript(fetch)
const url = new URL('https://v1.apizero.cn/api/exchange-rate');
url.searchParams.set('money', '1');
url.searchParams.set('from', 'CNY');
url.searchParams.set('to', 'USD');
fetch(url)
.then(response => response.json())
.then(data => {
if (data.code === 0) {
console.log(`${data.data.money} ${data.data.from_name} = ${data.data.result} ${data.data.to_name}`);
console.log(`汇率更新时间:${data.data.update_time}`);
} else {
console.error('错误:', data.msg);
}
})
.catch(error => console.error('请求失败:', error));
返回值解读
成功换算响应(HTTP 200)
{
"code": 0,
"data": {
"from": "CNY",
"from_name": "人民币",
"money": 1,
"rate": 0.146405,
"result": 0.1464,
"to": "USD",
"to_name": "美元",
"update_time": "2026-05-06 13:00:02"
},
"msg": "成功",
"request_id": "abc123def456"
}
字段说明:
code:状态码,0 表示成功,非0表示失败。msg:描述信息,成功时为“成功”,失败时提供错误原因。request_id:请求唯一标识,可用于问题排查。data.from/data.to:源/目标货币代码。data.from_name/data.to_name:对应货币的中文名称。data.money:请求的金额。data.rate:实时汇率(1单位源货币可兑换多少单位目标货币)。data.result:兑换结果(money × rate,保留小数点后四位)。data.update_time:数据更新时间(格式YYYY-MM-DD HH:mm:ss)。
货币列表响应(action=currencies)
当请求携带 action=currencies 时,返回一个包含所有支持货币对象的数组,每个对象包含 code(货币代码)和 name_cn(中文名称)。具体结构请以实际文档为准。
常见错误与处理
| HTTP状态码 | code值 | 含义 | 处理建议 |
|---|---|---|---|
| 400 | 4001 | 参数错误(如money<=0、无效货币代码、缺少必要参数) | 检查请求参数是否合法,货币代码是否为26种之一 |
| 401 | 4002 | 鉴权失败(Authorization头格式错误或Key无效) | 确认Bearer后空格格式,检查API Key是否有效 |
| 429 | 4003 | 频率超限(超过QPS 5/s或每日额度) | 增加请求间隔或升级配额 |
| 500 | 5000 | 服务端内部错误 | 稍后重试,若持续失败请联系服务商 |
注意:以上错误码和对应处理方案基于常见接口规范,具体请以原始文档为准。
工程化注意事项
- 缓存策略:汇率数据每分钟更新,建议在客户端或中间层缓存1分钟,避免大量重复请求。缓存过期后只拉取一次,可大幅降低QPS压力。
- 降级与容错:当API返回非0码或网络异常时,应展示上次缓存的汇率或提示用户“汇率获取失败”,不要直接阻塞业务流程。
- 前端展示:金额保留两位小数即可,汇率显示四位小数;注意不同货币的精度差异(如日元通常无小数)。
- 货币列表动态化:利用
action=currencies接口在应用启动时拉取支持货币列表并缓存,当上游新增货币时无需发版即可支持。 - 安全实践:API Key 仅应在服务端环境变量中配置,绝不可暴露在前端代码中。前端应通过后端代理转发请求。
参考文档
- 文档页:https://apizero.cn/aidocs/exchange-rate
- 原始文档:https://apizero.cn/aidocs/exchange-rate/raw.md
4903

被折叠的 条评论
为什么被折叠?



