人気のある通貨レートAPI用の統一されたプログラミングインターフェイスを提供するPHP APIラッパー。
お気に入りの通貨変換サービスを心配しないでください。突然シャットダウンまたはプランを切り替えてください。コードを変更せずに、簡単に切り替えます。
旅行Webサイトには通貨変換APIが必要でしたが、優れたPHPパッケージを見つけることができませんでした。 Rackbeat/php-currency-apiパッケージのアイデアは最も近くなりましたが、残念ながらそれは単なるスタブであり、実装されていませんでした。
| サービス | 識別子 |
|---|---|
| fixerio | fixerio |
| currencylayer | 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()メソッドを使用できます。例は、CurrencyLayerのJSONフォーマットオプションです。
$ currency -> config ( ' format ' , ' 1 ' );from()またはsource()のいずれかを使用して、基本通貨を設定できます。メソッドは同一です。
!注:各ドライバーは、独自のデフォルトの基本通貨を設定します。 CurrencyLayerは
USDを使用している間、Fixerioは基本通貨としてEURを使用します。
ほとんどのサービスでは、有料プランの基本通貨を変更することのみを行うことができます。ドライバーは、現在の計画で基本通貨の変更が許可されていない場合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 Interfaceを参照してください。
$ 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ほとんどの方法は、流fluentインターフェイスで使用できます。これにより、より読みやすいコードのメソッド呼び出しをチェーンできます。
// 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オブジェクトを使用して後で基本通貨を変更することができます。ただし、これは基本通貨を直接変更するほど正確ではないかもしれません。
!注: 2つの通貨間を変換するには、最初の
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%のテストカバレッジを求めているので、コードのテストを追加してください。