worksome / exchange
检查任意货币的汇率。
Requires
- php: ^8.2
- illuminate/contracts: ^10.0 || ^11.0
- nunomaduro/termwind: ^1.15 || ^2.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- guzzlehttp/guzzle: ^7.5
- larastan/larastan: ^2.6
- nunomaduro/collision: ^7.0 || ^8.1
- orchestra/testbench: ^8.0 || ^9.0
- pestphp/pest: ^2.33
- pestphp/pest-plugin-laravel: ^2.2
- worksome/coding-style: ^2.10
README
在Laravel中检查任意货币的汇率
如果你的应用程序支持多货币,你无疑需要检查汇率。有许多第三方服务可以完成这项任务,但为什么还要重新发明轮子,当我们已经为你做了所有艰苦的工作时呢?
Exchange为汇率API提供了一层抽象层,包括用于缓存、测试和本地开发的完整工具集。
安装
您可以通过composer安装此包。
composer require worksome/exchange
要安装exchange配置文件,您可以使用我们的install
artisan命令!
php artisan exchange:install
Exchange已安装!
用法
Exchange附带了一些有用的驱动程序,用于检索汇率。默认是exchange_rate
,这是一个免费服务,但您也可以根据您应用程序的需求进行更改。
可以通过EXCHANGE_DRIVER
环境变量设置驱动程序。支持的值有:null
、fixer
、exchange_rate
和cache
。让我们看看每个可用的选项。
空
您可以使用null
驱动程序在本地开始使用Exchange。这将简单地为每个汇率返回1.0
,这对于本地开发通常是不错的。
use Worksome\Exchange\Facades\Exchange; $exchangeRates = Exchange::rates('USD', ['GBP', 'EUR']);
在上面的示例中,我们根据美元检索英镑和欧元的汇率。rates
方法将返回一个Worksome\Exchange\Support\Rates
对象,该对象包含基础货币、检索到的汇率和检索时间。检索到的汇率是一个array
,其中货币代码是键,汇率是值。
$rates = $exchangeRates->getRates(); // ['GBP' => 1.0, 'EUR' => 1.0]
Fixer
当然,null
驱动程序在您需要实际的汇率时并不非常有用。为此,您应使用fixer
驱动程序。
在您的exchange.php
配置文件中,将default
设置为fixer
,或在您的.env
文件中将EXCHANGE_DRIVER
设置为fixer
。然后,您将需要从https://fixer.io/dashboard获取一个访问密钥。将FIXER_ACCESS_KEY
设置为Fixer提供的访问密钥。
就是这样!Fixer现在被配置为默认驱动程序,再次运行Exchange::rates()
将向Fixer发送请求,以获取最新的汇率。
ExchangeRate.host
exchangerate.host是Fixer的一个替代方案,具有相同的API规范。
在您的exchange.php
配置文件中,将default
设置为exchange_rate
,或在您的.env
文件中将EXCHANGE_DRIVER
设置为exchange_rate
。将EXCHANGE_RATE_ACCESS_KEY
设置为从exchangerate.host提供的访问密钥。
完成此任务后,您就可以开始使用exchangerate.host检索最新的汇率了。
Currency.GetGeoApi.com
Currency.GetGeoApi.com是一个您可以使用的免费配额的替代选项。
在您的exchange.php
配置文件中,将default
设置为currency_geo
,或在您的.env
文件中将EXCHANGE_DRIVER
设置为currency_geo
。将CURRENCY_GEO_ACCESS_KEY
设置为从currency.getgeoapi.com提供的访问密钥。
完成此任务后,您就可以开始使用Currency.GetGeoApi.com检索最新的汇率了。
Frankfurter.app
frankfurter.app 是由欧洲中央银行发布的一个开源API,用于获取当前和历史汇率,无需API密钥即可使用。
在您的 exchange.php
配置文件中,将 default
设置为 frankfurter
,或者在您的 .env
文件中将 EXCHANGE_DRIVER
设置为 frankfurter
。
完成此任务后,您就可以开始使用 frankfurter.app 来获取最新的汇率了。
缓存
您可能不希望在每次调用 Exchange::rates()
时都向第三方服务发起请求。为了解决这个问题,我们提供了一个缓存装饰器,可以用来将获取的汇率存储一段指定的时间(默认为24小时)。
在您的 exchange.php
配置文件中,将 default
设置为 cache
,或者在您的 .env
文件中将 EXCHANGE_DRIVER
设置为 cache
。您还需要在 services.cache.strategy
下选择一种策略。默认情况下,这将是 fixer
,但您也可以更改它。策略是当缓存中没有找到任何内容时,用于执行汇率查找的服务。
您还可以选择覆盖 ttl
(汇率缓存的秒数),缓存的 key
和 store
。
Artisan
我们提供了一个Artisan命令,用于检查您的项目中Exchange是否工作正常。
php artisan exchange:rates USD GBP EUR
在上述示例中,将从美元(USD)的基础汇率中检索并显示英镑(GBP)和欧元(EUR)的汇率。您可以将任意数量的货币添加到该命令中。
测试
为了帮助您使用Exchange编写测试,我们通过 Exchange::fake()
方法提供了一个假实现。
it('retrieves exchange rates', function () { Exchange::fake(['GBP' => 1.25, 'USD' => 1.105]); $this->get(route('my-app-route')) ->assertOk(); Exchange::assertRetrievedRates(); });
assertRetrievedRates
方法将导致您的测试在未检索到任何汇率时失败。
Exchange内部非常自豪于一个详尽的测试套件,使用Pest编写,严格的静态分析,以及非常高的代码覆盖率。您可以通过克隆项目并运行我们的测试脚本来运行这些测试。
composer test
更新日志
有关最近更改的更多信息,请参阅 GitHub Releases。
鸣谢
许可
MIT许可证(MIT)。有关更多信息,请参阅 许可证文件。