Обертка 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 для PHP Просто требуйте пакета с помощью composer , и вы готовы к работе!
$ composer require otherguy/php-currency-api OtherguyCurrencySymbol обеспечивает константы для каждой поддерживаемой валюты.
! Примечание. Вам не нужно использовать
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() . Примером является вариант форматирования форматирования JSON.
$ currency -> config ( ' format ' , ' 1 ' ); Вы можете использовать либо from() или source() для установки базовой валюты. Методы идентичны.
! Примечание. Каждый драйвер устанавливает собственную базовую валюту по умолчанию. Fixerio использует
EURв качестве базовой валюты, в то время как CurrencyLayer использует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Большинство методов могут использоваться с интерфейсом 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, чтобы позже изменить базовую валюту. Это может быть не так точное, как изменение базовой валюты напрямую, хотя.
! Примечание. Чтобы преобразовать между двумя валютами, вам необходимо запросить их обоих в вашем первоначальном запросе
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% тестовым покрытиям для этого репозитория, поэтому, пожалуйста, обязательно добавьте тесты для вашего кода.