越来越多的产品和服务是在网上获取和购买的。由于我们生活在一个地球村,如果我们有一个网上商店,我们的许多访问者很可能是在一个与我们自己不同的国家,并使用与我们自己不同的货币。
如果我们想为他们提供一个良好的用户体验,以增加他们购买我们的产品的机会,并再次访问网站,有一些非常简单的事情我们可以做。用他们自己的货币显示购物项目的价格。为了达到这个目的,我们可以利用当时两种货币之间的汇率,将商品的价格从基础货币(如欧元)转换成访问者的货币(如人民币)。
货币汇率不断变化,以小时为单位(甚至更快)。这意味着,我们不能在我们的应用程序中存储一个预先定义的汇率列表;这些汇率必须实时收集。然而,这在今天并不是一个问题。由于有了提供货币兑换数据的API,我们可以毫不费力地在我们的在线商店中添加一个货币兑换器。
在这篇文章中,我们将介绍[ExchangeRatesApi.io],一个流行的API解决方案,提供168种货币的当前和历史汇率数据。
我们想要实现的目标
简单地说,我们想做亚马逊正在做的事。让用户在我们的网上商店选择以他们自己选择的货币显示价格。
当访问amazon.co.uk的一个产品页面时,我们会看到以英镑为单位的价格。

但是,如果我们愿意,我们也可以看到不同货币的价格。在国家/地区设置中,有一个选项可以改变货币。

点击 "更改 "后,我们会看到一个选择输入,其中包含几种预定义的货币。在这些货币中,我选择了欧元。

最后,回到产品页面,价格以欧元显示。

通过API访问汇率数据,我们可以为我们自己的在线商店实现同样的功能。
我们如何做到这一点
ExchangeRatesApi.io提供一个REST API,提供168种货币的最新外汇数据。它总是最新的,从世界各地的商业来源和银行的广泛基础上汇编数据。
[在注册了他们的服务]后(提示:他们有一个[免费层]),我们将被分配一个API访问密钥。

我们抓住我们的API访问密钥,并将其附加到端点。
https://api.exchangeratesapi.io/v1/latest
?access_key=YOUR_API_KEY
为了可视化响应,在你的浏览器中复制/粘贴端点。

从上图中可以看出,所有168种货币的数据都已被检索出来。为了将结果缩小到其中的几个,我们[通过参数表示货币代码][symbols].
例如,为了检索美元、英镑、澳元、日元和人民币的数据(与欧元比较,欧元是默认的基础货币),我们执行这个端点。
https://api.exchangeratesapi.io/v1/latest
?access_key=YOUR_API_KEY
&symbols=USD,GBP,AUD,JPY,CNY
响应是以下内容。
{
"success": true,
"timestamp": 1620904263,
"base": "EUR",
"date": "2021-05-13",
"rates": {
"USD": 1.207197,
"GBP": 0.860689,
"AUD": 1.568196,
"JPY": 132.334216,
"CNY": 7.793428
}
}
我们可以检索到什么数据
ExchangeRatesApi.io提供几个REST端点,以获取不同的数据集。根据订阅的计划,端点可能有,也可能没有(他们的定价页面解释了每个层级涵盖的功能)。
下面指出的端点必须连接到https://api.exchangeratesapi.io/v1/ (例如:latest 变成https://api.exchangeratesapi.io/v1/latest ),并在access_key 参数中加入你的API访问密钥。
最新费率
该 latest端点实时返回所有可用货币或特定货币的汇率数据。
货币转换
该 convert端点可以将一个金额从任何货币转换为支持的168种货币中的任何其他货币。
历史汇率
这个端点的形状是 YYYY-MM-DD(如2021-03-20),对应于我们要检索历史汇率信息的日期。
时间序列数据
该 timeseries端点返回两个指定日期之间的每日汇率历史数据,最大时间范围为365天。
波动数据
该 fluctuation端点返回指定日期之间的波动数据,最大时间范围为365天。
从API中获取数据
为了实现货币转换,我们可以使用convert 端点(为此我们需要订阅基本层)。
https://api.exchangeratesapi.io/v1/convert
?access_key=YOUR_API_KEY
&from=GBP
&to=JPY
&amount=25
我们将获得的响应看起来像这样。
{
"success": true,
"query": {
"from": "GBP",
"to": "JPY",
"amount": 25
},
"info": {
"timestamp": 1620904845,
"rate": 154.245331
},
"historical": "",
"date": "2021-05-14",
"result": 3856.079212
}
由于数据是通过REST API暴露的,我们可以方便地检索任何基于任何堆栈的应用程序,无论它是在客户端还是在服务器端运行,而不需要安装任何额外的库。
客户端
下面的JavaScript代码连接到API,并在控制台中打印出转换后的金额和汇率。
// Set endpoint and your access key
const access_key = 'YOUR_API_KEY';
const from = 'GPB';
const to = 'JPY';
const amount = 25;
const url = https://api.exchangeratesapi.io/v1/convert?access_key=${ access_key }&from=${ from }&to=${ to }&amount=${ amount };
// Get the most recent exchange rates via the "latest" endpoint:
fetch(url)
.then(response => response.json())
.then(data => {
// If our tier does not support the requested endpoint, we will get an error
if (data.error) {
console.log('Error:', data.error);
return;
}
// We got the data
console.log('Success:', data);
console.log('Converted amount: ' + data.result);
console.log('(Exchange rate: ' + data.info.rate + ')');
})
.catch((error) => {
console.error('Error:', error);
});
服务器端
下面的代码演示了如何在一个PHP应用程序中连接到REST API,并打印出转换后的结果。
同样的程序也可以在其他语言中实现。
- 定义端点的URL,附上你的API访问密钥。
- 连接到端点,以JSON格式检索其响应。
- 将JSON数据解码成一个对象/数组。
- 从
result属性下获取转换后的金额。
// Set endpoint and your access key
$access_key = 'YOUR_API_KEY';
$from = 'GBP';
$to = 'JPY';
$amount = 25;
// Initialize CURL:
$ch = curl_init("https://api.exchangeratesapi.io/v1/convert?access_key=${access_key}&from=${from}&to=${to}&amount=${amount}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Get the JSON data:
$json = curl_exec($ch);
curl_close($ch);
// Decode JSON response:
$conversionResult = json_decode($json, true);
// Access the converted amount
echo $conversionResult['result'];
结论
ExchangeRatesApi.io是作为一个开源项目诞生的,目的是提供由欧洲中央银行发布的当前和历史外汇汇率,并以Python语言编写。
如果你想为你的网上商店纳入货币转换,模仿亚马逊,为你的访问者提供一个引人注目的用户体验,那么你可以下载并安装这个开源项目。
而且你还可以让它变得更容易。如果你想让你的货币转换器在短时间内工作,适用于任何编程语言,访问总是最新的数据,包括广泛的商业来源,并从一个超快的API,正常运行时间几乎为100%(在过去12个月中为99.9%),然后检查ExchangeRatesApi.io。