amrshawky / laravel-currency
此包已被 废弃 并不再维护。未建议替代包。
一个基于 exchangerate.host 提供的免费 API 的 Laravel 包,用于当前和历史货币汇率以及加密货币汇率。
6.0.0
2023-02-17 18:40 UTC
Requires
- php: >=7.2
- ext-json: *
- amrshawky/currency: ^1.0
- guzzlehttp/guzzle: >=6.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- phpunit/phpunit: >=8.5.23
README
更新:exchangerate.host 现在需要 API 密钥,此包不再维护。
Laravel currency 是一个用于当前和历史货币汇率以及加密货币汇率的简单包。基于免费 API exchangerate.host - 无需 API 密钥!
注意:此包是 Currency 库的集成
要求
- PHP >= 7.2
- Laravel >= 6.0
- guzzlehttp >= 6.0
安装
composer require amrshawky/laravel-currency
使用方法
1. 货币转换
要从一种货币转换到另一种货币,可以链接方法
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->get();
这将返回转换后的金额或失败时返回 null
。
要转换的金额默认为 1
,您可以指定金额
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->amount(50) ->get();
可用方法
- 使用历史汇率
YYYY-MM-DD
转换货币
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->date('2019-08-01') ->get();
- 将转换金额四舍五入到小数位
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->round(2) ->get();
- 您还可以在外汇
default
、银行视图或加密货币之间切换数据源
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('BTC') ->to('ETH') ->source('crypto') ->get();
2. 最新汇率
要获取最新汇率,可以链接方法
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->latest() ->get(); // ['USD' => 1.215707, ...] Currency::rates() ->latest() ->source('crypto') ->get(); // ['ETH' => 3398.61, ...]
这将返回所有可用货币的 array
或失败时返回 null
。
可用方法
- 就像货币转换一样,您可以链接任何可用方法
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->latest() ->symbols(['USD', 'EUR', 'EGP']) //An array of currency codes to limit output currencies ->base('GBP') //Changing base currency (default: EUR). Enter the three-letter currency code of your preferred base currency. ->amount(5.66) //Specify the amount to be converted ->round(2) //Round numbers to decimal places ->source('ecb') //Switch data source between forex `default`, bank view or crypto currencies. ->get();
3. 历史汇率
历史汇率适用于大多数货币,可追溯到1999年。
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->historical('2020-01-01') //`YYYY-MM-DD` Required date parameter to get the rates for ->get(); // ['USD' => 1.1185, ...] Currency::rates() ->historical('2021-03-30') ->source('crypto') ->get(); // ['BTC' => 2.0E-5, ...]
与最新汇率相同,您可以链接任何可用方法
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->historical('2020-01-01') ->symbols(['USD', 'EUR', 'CZK']) ->base('GBP') ->amount(5.66) ->round(2) ->source('ecb') ->get();
4. 时间序列汇率
时间序列是您选择的两日期之间的每日历史汇率,最长时间框架为365天。这将返回一个 array
或失败时返回 null
。
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->timeSeries('2021-05-01', '2021-05-02') //`YYYY-MM-DD` Required dates range parameters ->symbols(['USD']) //[optional] An array of currency codes to limit output currencies ->base('GBP') //[optional] Changing base currency (default: EUR). Enter the three-letter currency code of your preferred base currency. ->amount(5.66) //[optional] Specify the amount to be converted (default: 1) ->round(2) //[optional] Round numbers to decimal places ->source('ecb') //[optional] Switch data source between forex `default`, bank view or crypto currencies. ->get(); /** [ '2021-05-01' => [ "USD" => 1.201995 ], '2021-05-02' => [ "USD" => 1.2027 ] ] */
5. 涨跌
检索有关货币每日波动的信息,最长时间框架为365天。这将返回一个 array
或失败时返回 null
。
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->fluctuations('2021-03-29', '2021-04-15') //`YYYY-MM-DD` Required dates range parameters ->symbols(['USD']) //[optional] An array of currency codes to limit output currencies ->base('GBP') //[optional] Changing base currency (default: EUR). Enter the three-letter currency code of your preferred base currency. ->amount(5.66) //[optional] Specify the amount to be converted (default: 1) ->round(2) //[optional] Round numbers to decimal places ->source('ecb') //[optional] Switch data source between forex `default`, bank view or crypto currencies. ->get(); /** [ 'USD' => [ "start_rate" => 1.376454, "end_rate" => 1.37816, "change" => -0.001706, "change_pct" => -0.001239 ] ] */
抛出异常
默认行为是在请求过程中出现错误时返回 null
(连接超时、DNS 错误、客户端或服务器错误状态码、缺少 API 成功参数等)。
如果您希望抛出异常而不是返回 null
,则可以使用 throw
方法。该方法返回货币实例,允许您链接其他方法
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->amount(20) ->throw() ->get();
如果您希望在抛出异常之前执行一些其他逻辑,则可以将闭包传递给 throw
方法
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->amount(20) ->throw(function ($response, $e) { // }) ->get();
其他方法
- 您可以使用
withoutVerifying
方法指示在发送请求时不应验证 TLS 证书
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::convert() ->from('USD') ->to('EUR') ->withoutVerifying() ->get();
- 您可以使用
withOptions
方法指定额外的 Guzzle 请求选项。该方法接受键/值对数组
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->historical('2021-04-30') ->withOptions([ 'debug' => true, 'timeout' => 3.0 ]) ->get();
- 当第一个参数给定的方法评估为 true 时,将执行
when
方法给出的回调
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->latest() ->when(true, function ($rates) { // will execute $rates->symbols(['USD', 'EUR', 'EGP']) ->base('GBP'); }) ->when(false, function ($rates) { // won't execute $rates->symbols(['HKD']); }) ->get();
测试
Currency 使用 Laravel facades,这使得它很容易 mock,因此它实际上在测试期间不会执行
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::shouldReceive('convert') ->once() ->andReturn(1.50); Currency::shouldReceive('rates') ->once() ->andReturn(['EUR' => 1,'USD' => 1.215707]);
有关银行来源列表的更多信息,请点击此处
许可证
MIT许可证(MIT)。更多详细信息请参阅LICENSE。