ракоза/fixerio

Fixer.io 的包装器

2.1.0 2021-07-21 20:37 UTC

This package is not auto-updated.

Last update: 2024-09-27 10:12:11 UTC


README

这是一个轻量级的包装器,用于Fixer.io,一个提供外汇汇率和货币转换的服务。它提供了一些方法,可以轻松构建 URL、执行 API 调用并返回响应。

安装

  • 将包添加到您的 composer.json 文件中,并运行 composer update
{
    "require": {
        "rakoza/fixerio": "~1.0"
    }
}

Laravel 用户可以使用 Facade 以更简单的方式访问。

  • Rakoza\Fixerio\ExchangeServiceProvider::class 添加到您的 config/app.php 文件中的 providers 数组中。
  • config/app.php 文件中的 aliases 数组中添加一个新的别名:'Exchange' => Rakoza\Fixerio\Facades\Exchange::class

使用方法

让我们获取 EUR 和 GBP 以 USD 为基准货币的汇率

use Rakoza\Fixerio\Exchange;
use Rakoza\Fixerio\Currency;

$exchange = new Exchange();
$exchange->key("YOUR_ACCESS_KEY");
$exchange->base(Currency::USD);
$exchange->symbols(Currency::EUR, Currency::GBP);

$rates = $exchange->get();

默认情况下,基准货币是 EUR,所以如果那是您的基准货币,则不需要设置它。符号也可以省略,因为 Fixer 将返回所有受支持货币。

没有基准和货币的简化示例

$rates = (new Exchange())->key("YOUR_ACCESS_KEY")->get();

使用 historical 选项将返回自指定日期以来的每日货币汇率。在这里也可以省略基准货币和符号,让我们看一个完整的示例。

$exchange = new Exchange();
$exchange->key("YOUR_ACCESS_KEY");
$exchange->historical('2012-12-12');
$exchange->base(Currency::AUD);
$exchange->symbols(Currency::USD, Currency::EUR, Currency::GBP);

$rates = $exchange->get();

最后,您可能已经注意到使用了 Currency 类和货币常量。这只是防止错误的一个便利,但它们完全是可选的。

这个

$exchange->base(Currency::AUD);
$exchange->symbols(Currency::USD, Currency::EUR, Currency::GBP);

相当于

$exchange->base('AUD');
$exchange->symbols('USD', 'EUR', 'GBP');

使用满足您需求的任何方法。

响应

响应是一个简单的数组,以货币作为键,以比率作为值。对于如下请求

$rates = (new Exchange())->key("YOUR_ACCESS_KEY")->symbols(Currency::USD, Currency::GBP)->get();

响应将是一个数组

array('GBP' => 0.7009, 'USD' => 1.0666)

您可以使用键作为字符串或使用货币常量来访问

print $rates['EUR'];
print $rates[Currency::GBP];

还有一个选项可以将响应作为对象处理

$rates = (new Exchange())->key("YOUR_ACCESS_KEY")->symbols(Currency::USD, Currency::GBP)->getAsObject();

print $rates->USD;
print $rates->GBP;

最后一个选项是将响应作为 Result 类返回。这允许访问从源返回的全部属性集。

$result = (new Exchange())->key("YOUR_ACCESS_KEY")->symbols(Currency::USD, Currency::GBP)->getResult();

$date = $result->getDate(); // The date the data is from
$rates = $result->getRates(); // Array of rates as above
$usd = $result->getRate(Currency::USD); // Will return null if there was no value

错误处理

为了处理错误,该包提供了 2 个异常。当 HTTP 请求出错时为 ConnectionException,当 API 返回的响应不符合预期时为 ResponseException。一个带有异常处理的示例

use Rakoza\Fixerio\Exchange;
use Rakoza\Fixerio\Exceptions\ConnectionException;
use Rakoza\Fixerio\Exceptions\ResponseException;

try {
    $exchange = new Exchange();
    $exchange->key("YOUR_ACCESS_KEY");
    $rates = $exchange->get();
}
catch (ConnectionException $e) {
    // handle
}
catch (ResponseException $e) {
    // handle
}

Laravel 使用方法

对于 Laravel 来说,除了 Facade 外没有变化。它只是使用该包的更短方式的一个便利。

use Exchange;
use Rakoza\Fixerio\Currency;

$rates = Exchange::base(Currency::USD)->get();

要使用此 Facade,您应该在 config/services.php 文件中设置您的访问密钥。

'fixer'=>[
    'key'=>env("FIXER_ACCESS_KEY"),
]