cmbuckley/exchange-rates

一个用于与exchangerate.host API交互的软件包

2.0.0 2024-03-11 23:41 UTC

This package is auto-updated.

Last update: 2024-09-12 11:46:55 UTC


README

PHP Exchange Rates

Latest Version on Packagist Build Status Total Downloads PHP from Packagist GitHub license

目录

概览

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 分支。

致谢

变更日志

查看 变更日志 了解最新更改的更多信息。

许可协议

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件