ракоза / fixerio
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ~7.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 4.8.*
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"), ]