andromedalab/fixerio

Fixer.io 的包装器

2.0.3 2023-12-06 17:40 UTC

This package is auto-updated.

Last update: 2024-09-06 19:34:35 UTC


README

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

安装

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

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

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

使用方法

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

use Fadion\Fixerio\Exchange;
use Fadion\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();

使用 timeseries 选项将返回日期范围内的每一天的货币汇率。周期不应超过 1 年。基础货币和符号也可以省略,例如

$exchange = new Exchange();
$exchange->key("YOUR_ACCESS_KEY");
$exchange->timeseries('2012-01-01', '2012-12-31');
$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

错误处理

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

use Fadion\Fixerio\Exchange;
use Fadion\Fixerio\Exceptions\ConnectionException;
use Fadion\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 Fadion\Fixerio\Currency;

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

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

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