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%的測試覆蓋範圍,因此請確保為您的代碼添加測試。