vanadiphp / currency
一个基于exchangerate.host提供的免费API的Laravel包,用于获取当前和历史货币汇率以及加密货币汇率
Requires
- php: >=7.2
- ext-json: *
- amrshawky/currency: ^1.0
- guzzlehttp/guzzle: >=6.0
- illuminate/support: >=6.0
Requires (Dev)
- phpunit/phpunit: >=8.5.23
This package is auto-updated.
Last update: 2024-08-25 08:48:34 UTC
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成功参数等)。
如果您想抛出异常,可以使用 throw
方法,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请求选项。withOptions
方法接受键/值对数组
use AmrShawky\LaravelCurrency\Facade\Currency; Currency::rates() ->historical('2021-04-30') ->withOptions([ 'debug' => true, 'timeout' => 3.0 ]) ->get();
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,这使得它很容易模拟,因此在测试期间实际上不会执行
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。