PHP API包装器为流行货币汇率API提供统一的编程接口。
不用担心您喜欢的货币转换服务突然关闭或对您开设计划。轻松切换,而无需更改代码。
我需要旅行网站的货币转换API,但找不到良好的PHP软件包。 Rackbeat/php-currency-api软件包的想法最接近,但不幸的是它只是一个存根,没有实现。
| 服务 | 标识符 |
|---|---|
| FIXERIO | fixerio |
| 货币延期 | currencylayer |
| 开放汇率 | openexchangerates |
| 汇率API | exchangeratesapi |
如果您想查看添加更多服务,请随时打开问题!
PHP 8.x或PHP 7.3+或更高(在7.3和7.4上测试)composer依赖管理器只需使用composer就需要包装,就可以了!
$ composer require otherguy/php-currency-apiOtherguyCurrencySymbol类为每种受支持的货币提供常数。
!注意:您不需要使用
OtherguyCurrencySymbol来指定符号。这只是一个便利助手,不需要使用。您可以将诸如'USD', 'EUR', ...的字符串传递给所有方法。
// 'USD'
$ symbol = Otherguy Currency Symbol:: USD ;使用all()方法检索所有货币符号的数组:
// [ 'AED', 'AFN', ... 'ZWL' ]
$ symbols = Otherguy Currency Symbol:: all (); names()方法返回带有货币名称的关联数组:
// [ 'AED' => 'United Arab Emirates Dirham', 'AFN' => 'Afghan Afghani', ... ]
$ symbols = Otherguy Currency Symbol:: names ();要获取单个货币的名称,请使用name()方法:
// 'United States Dollar'
$ symbols = Otherguy Currency Symbol:: name ( Otherguy Currency Symbol:: USD ); $ currency = Otherguy Currency DriverFactory:: make ( ' fixerio ' ); // driver identifier from supported drivers.要获取支持驱动程序的列表,请使用getDrivers()方法:
// [ 'mock', 'fixerio', 'currencylayer', ... ]
$ drivers = Otherguy Currency DriverFactory:: getDrivers ()大多数API提供商都要求您注册并使用已发行的访问密钥对其API进行身份验证。您可以这样指定您的访问密钥:
$ currency -> accessKey ( ' your-access-token-goes-here ' );要设置进一步的配置选项,您可以使用config()方法。一个示例是Currency Layerer的JSON格式化选项。
$ currency -> config ( ' format ' , ' 1 ' );您可以使用from()或source()设置基本货币。这些方法是相同的。
!注:每个驱动程序设置自己的默认基本货币。 Fixerio使用
EUR作为基本货币,而货币延期使用USD。
大多数服务仅允许您在其付费计划中更改基本货币。如果您的当前计划不允许更改基本货币,则驾驶员将抛出OtherguyCurrencyExceptionsApiException
$ currency -> source ( Otherguy Currency Symbol:: USD );
$ currency -> from ( Otherguy Currency Symbol:: USD );您可以使用to()或symbols()设置返回货币。这些方法是相同的。将单个货币或一系列货币符号传递给这些方法之一。
!注意:传递一个空数组以返回该驱动程序支持的所有货币符号。如果您根本不调用该方法,这是默认值。
$ currency -> to ( Otherguy Currency Symbol:: BTC );
$ currency -> symbols ([ Otherguy Currency Symbol:: BTC , Otherguy Currency Symbol:: EUR , Otherguy Currency Symbol:: USD ]);这检索了最新的汇率,并返回ConversionResult对象。
$ currency -> get (); // Get latest rates for selected symbols, using set base currency
$ currency -> get ( ' DKK ' ); // Get latest rates for selected symbols, using DKK as base currency要检索历史汇率,请使用historical()方法。请注意,您需要将日期指定为方法参数或使用date()方法。有关更多信息,请参见Fluent界面。
$ currency -> date ( ' 2010-01-01 ' )-> historical ();
$ currency -> historical ( ' 2018-07-01 ' );使用convert()方法将货币之间的金额转换。
!注:大多数API提供商不允许使用您的免费帐户访问此方法。您仍然可以使用最新的速率或历史速率端点,并在
ConversionResult对象上执行计算或转换。
$ currency -> convert ( 10.00 , ' USD ' , ' THB ' ); // Convert 10 USD to THB
$ currency -> convert ( 122.50 , ' NPR ' , ' EUR ' , ' 2019-01-01 ' ); // Convert 122.50 NPR to EUR using the rates from January 1st, 2019大多数方法都可以与流利的接口一起使用,从而使您可以链方法调用更多可读代码:
// Namespaces are omitted for readability!
DriverFactory:: make ( ' driver ' )-> from (Symbol:: USD )-> to (Symbol:: EUR )-> get ();
DriverFactory:: make ( ' driver ' )-> from (Symbol:: USD )-> to (Symbol:: NPR )-> date ( ' 2013-03-02 ' )-> historical ();
DriverFactory:: make ( ' driver ' )-> from (Symbol:: USD )-> to (Symbol:: NPR )-> amount ( 12.10 )-> convert ();get()和historical()端点返回ConversionResult对象。此对象允许您轻松执行计算和转换。
!注意:即使大多数提供商的免费帐户不允许您更改基本货币,您仍然可以使用
ConversionResult对象以稍后更改基本货币。但是,这可能不像直接更改基本货币那样准确。
!注意:要在两种货币之间转换,您需要在初始
get()或historical()请求中请求它们。您无法在尚未获取的货币之间转换!
请参阅以下代码,以获取一些您可以使用ConversionResult对象进行操作的示例。
$ result = DriverFactory:: make ( ' driver ' )-> from (Symbol:: USD )-> to ([Symbol:: EUR , Symbol:: GBP ])-> get ();
// [ 'USD' => 1.00, 'EUR' => 0.89, 'GBP' => 0.79 ]
$ result -> all ();
// 'USD'
$ result -> getBaseCurrency ();
// '2019-06-11'
$ result -> getDate ();
// 0.89
$ result -> rate (Symbol:: EUR );
// CurrencyException("No conversion result for BTC!");
$ result -> rate (Symbol:: BTC );
// 5.618
$ result -> convert ( 5.0 , Symbol:: EUR , Symbol:: USD );
// [ 'USD' => 1.13, 'EUR' => 1.00, 'GBP' => 0.89 ]
$ result -> setBaseCurrency (Symbol:: EUR )-> all ();
// 1.12
$ result -> setBaseCurrency (Symbol:: GBP )-> rate (Symbol:: EUR );拉力请求非常欢迎!我正在为此存储库寻求100%的测试覆盖范围,因此请确保为您的代码添加测试。