cmbuckley / exchange-rates
一个用于与exchangerate.host API交互的软件包
Requires
- php: ^8.2
- ext-bcmath: *
- ext-json: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- mockery/mockery: ^1.0
- nesbot/carbon: ^3.0
- phpunit/phpunit: ^11.0
- symfony/var-dumper: ^5.3
README
目录
概览
Exchange Rates 是一个简单的PHP软件包,用于与 exchangerate.host API 交互。您可以使用它获取最新或历史汇率,以及在不同货币和加密货币之间转换货币价值。
安装
您可以通过Composer安装此软件包
composer require cmbuckley/exchange-rates
此软件包已开发和测试,可满足以下最低要求
- PHP 8.2
用法
设置
exchangerate.host 服务需要访问密钥,您可以在注册并免费申请。您需要添加一张支付卡以获取密钥,但如果您处于免费计划,则不会收费。在免费计划中,您每月限制为100次请求。
按照以下方式设置API密钥
use StarSquare\ExchangeRates\Classes\ExchangeRate; $exchangeRates = new ExchangeRate(); $exchangeRates->setServiceOptions([ 'access_key' => '123abc', ]);
API在免费计划中也不支持HTTPS。如果您处于付费计划并希望使用HTTPS,请传递tls
服务选项
$exchangeRates->setServiceOptions([ 'access_key' => '123abc', 'tls' => true, ]);
方法
支持的货币
要获取软件包支持的可用货币,您可以使用如下的currencies()
方法
$exchangeRates->currencies();
两种货币之间的汇率
要获取一种货币对另一种货币的汇率,您可以使用exchangeRate()
方法。
以下示例显示了如何获取今天的GBP对EUR的汇率
$result = $exchangeRates->exchangeRate('GBP', 'EUR'); // $result: '1.10086'
如果传递了有效的日期作为第三个参数,则将返回该日的汇率。如果没有传递日期,则将使用今天的汇率。
多于两种货币之间的汇率
在单个调用中获取多种货币的汇率是可能的。如果您需要一次性获取许多汇率,而不想进行多次API调用,这特别有用。
为此,您可以使用exchangeRate()
方法并传递一个包含货币代码字符串的数组作为第二个参数。这将返回一个包含汇率为字符串的数组
$result = $exchangeRates->exchangeRate('GBP', ['EUR', 'USD']); // $result: [ // 'GBPEUR' => '1.10086', // 'GBPUSD' => '1.25622' // ];
如上所述,您可以通过传递日期作为第三个参数来获取该日的汇率。
日期范围内的汇率
要获取两种货币和日期范围内的汇率,您可以使用exchangeRateBetweenDateRange()
方法。
以下示例显示了如何获取过去3天内GBP到EUR的汇率
$result = $exchangeRates->exchangeRateBetweenDateRange( 'GBP', 'EUR', (new DateTime)->sub(new DateInterval('P3D')), new DateTime ); // $result: [ // '2020-07-07' => [ // 'GBPEUR' => '1.1092623405', // ], // '2020-07-08' => [ // 'GBPEUR' => '1.1120625424', // ], // '2020-07-09' => [ // 'GBPEUR' => '1.1153867604', // ], // ];
与之前一样,您可以通过传递一个包含货币代码的数组作为第二个参数
$result = $exchangeRates->exchangeRateBetweenDateRange( 'GBP', ['EUR', 'USD'], (new DateTime)->sub(new DateInterval('P3D')), new DateTime ); // $result: [ // '2020-07-07' => [ // 'GBPEUR' => '1.1092623405', // 'GBPUSD' => '1.2523571825', // ], // '2020-07-08' => [ // 'GBPEUR' => '1.1120625424', // 'GBPUSD' => '1.2550737853', // ], // '2020-07-09' => [ // 'GBPEUR' => '1.1153867604', // 'GBPUSD' => '1.2650716636', // ], // ];
货币转换
与获取一种货币到另一种货币的汇率类似,您还可以将货币价值从一种货币转换为另一种货币。为此,您可以使用convert()
方法。
在传递要转换的货币价值(第一个参数)时,您必须确保以该货币的最小面额传递。例如,£1 GBP将传递为100(因为£1 = 100便士)。
以下示例显示了如何按今天的汇率将£1转换为EUR
$result = $exchangeRates->convert(100, 'GBP', 'EUR'); // $result: '110.15884906'
如果传递了有效的日期作为第三个参数,将使用该日的汇率。如果没有传递日期,则使用今天的汇率。
您还可以使用 convert()
方法将货币值从一种货币转换为多种货币。为此,您可以传递一个包含货币代码字符串的数组作为第三个参数。
$result = $exchangeRates->convert( 100, 'GBP', ['EUR', 'USD'] ); // $result: [ // 'GBPEUR' => '110.15884906', // 'GBPUSD' => '125.30569081' // ];
日期范围内货币转换
类似于获取日期范围内的汇率,您也可以使用汇率将一种货币的货币值转换为另一种货币。为此,您可以使用 convertBetweenDateRange()
方法。
$result = $exchangeRates->convertBetweenDateRange( 100, 'GBP', 'EUR', (new DateTime)->sub(new DateInterval('P3D')), new DateTime ); // $result: [ // '2020-07-07' => [ // 'GBPEUR' => '110.92623405', // ], // '2020-07-08' => [ // 'GBPEUR' => '111.20625424', // ], // '2020-07-09' => [ // 'GBPEUR' => '111.53867604', // ], // ];
您还可以转换为多种货币。
$result = $exchangeRates->convertBetweenDateRange( 100, 'GBP', ['EUR', 'USD'], (new DateTime)->sub(new DateInterval('P3D')), new DateTime ); // $result: [ // '2020-07-07' => [ // 'GBPEUR' => '110.92623405', // 'GBPUSD' => '125.23571825', // ], // '2020-07-08' => [ // 'GBPEUR' => '111.20625424', // 'GBPUSD' => '125.50737853', // ], // '2020-07-09' => [ // 'GBPEUR' => '111.53867604', // 'GBPUSD' => '126.50716636', // ], // ];
测试
要运行该软件包的测试,可以使用以下命令。
composer test
贡献
如果您想对该软件包进行任何更改或改进,请随时提出拉取请求。
在提交拉取请求之前,请遵循以下指导方针以贡献此库。
- 为任何新添加的函数编写测试。如果您正在更新现有代码,请确保现有测试通过,并在需要时编写更多测试。
- 遵循 PSR-12 编码标准。
- 将所有拉取请求提交到
main
分支。
致谢
- Chris Buckley
- Ash Allen
- Jess Pickup (Logo)
- 所有贡献者
变更日志
查看 变更日志 了解最新更改的更多信息。
许可协议
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。