worksome/exchange

检查任意货币的汇率。

资助包维护!
worksome

v2.1.0 2024-03-22 14:58 UTC

This package is auto-updated.

Last update: 2024-09-22 16:15:21 UTC


README

在Laravel中检查任意货币的汇率

Latest Version on Packagist GitHub Tests Action Status GitHub Static Analysis Action Status Total Downloads

如果你的应用程序支持多货币,你无疑需要检查汇率。有许多第三方服务可以完成这项任务,但为什么还要重新发明轮子,当我们已经为你做了所有艰苦的工作时呢?

Exchange为汇率API提供了一层抽象层,包括用于缓存、测试和本地开发的完整工具集。

安装

您可以通过composer安装此包。

composer require worksome/exchange

要安装exchange配置文件,您可以使用我们的install artisan命令!

php artisan exchange:install

Exchange已安装!

用法

Exchange附带了一些有用的驱动程序,用于检索汇率。默认是exchange_rate,这是一个免费服务,但您也可以根据您应用程序的需求进行更改。

可以通过EXCHANGE_DRIVER环境变量设置驱动程序。支持的值有:nullfixerexchange_ratecache。让我们看看每个可用的选项。

您可以使用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(汇率缓存的秒数),缓存的 keystore

Artisan

我们提供了一个Artisan命令,用于检查您的项目中Exchange是否工作正常。

php artisan exchange:rates USD GBP EUR

在上述示例中,将从美元(USD)的基础汇率中检索并显示英镑(GBP)和欧元(EUR)的汇率。您可以将任意数量的货币添加到该命令中。

CleanShot 2022-02-23 at 13 10 55@2x

测试

为了帮助您使用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)。有关更多信息,请参阅 许可证文件