Un envoltorio de API PHP para ofrecer una interfaz de programación unificada para las API populares de tasas monetarias.
No se preocupe por su servicio favorito de conversión de divisas de repente que se apaga o cambia los planes. Cambie fácilmente, sin cambiar su código.
Necesitaba una API de conversión de divisas para mi sitio web de viajes, pero no pude encontrar un buen paquete PHP. La idea del paquete Rackbeat/php-currency-api fue más cercano, pero desafortunadamente fue solo un trozo y no implementado.
| Servicio | Identificador |
|---|---|
| Fijación | fixerio |
| Moneda de moneda | currencylayer |
| Tipos de cambio abiertos | openexchangerates |
| API de tipos de cambio | exchangeratesapi |
Si desea ver más servicios agregados, ¡no dude en abrir un problema!
PHP 8.x o PHP 7.3+ o superior (probado tanto en 7.3 como en 7.4 )composer para PHP ¡Simplemente requiera el paquete usando composer y listo!
$ composer require otherguy/php-currency-api La clase OtherguyCurrencySymbol proporciona constantes para cada moneda admitida.
! NOTA: No está obligado a usar
OtherguyCurrencySymbolpara especificar símbolos. Es simplemente un ayudante de conveniencia y no necesita usarse. Simplemente puede pasar cadenas como'USD', 'EUR', ...a todos los métodos.
// 'USD'
$ symbol = Otherguy Currency Symbol:: USD ; Use el método all() para recuperar una matriz de todos los símbolos de divisas:
// [ 'AED', 'AFN', ... 'ZWL' ]
$ symbols = Otherguy Currency Symbol:: all (); El método names() devuelve una matriz asociativa con nombres de divisas en su lugar:
// [ 'AED' => 'United Arab Emirates Dirham', 'AFN' => 'Afghan Afghani', ... ]
$ symbols = Otherguy Currency Symbol:: names (); Para obtener el nombre de una sola moneda, use el método name() :
// 'United States Dollar'
$ symbols = Otherguy Currency Symbol:: name ( Otherguy Currency Symbol:: USD ); $ currency = Otherguy Currency DriverFactory:: make ( ' fixerio ' ); // driver identifier from supported drivers. Para obtener una lista de controladores compatibles, use el método getDrivers() :
// [ 'mock', 'fixerio', 'currencylayer', ... ]
$ drivers = Otherguy Currency DriverFactory:: getDrivers ()La mayoría de los proveedores de API requieren que se registre y use su clave de acceso emitido para autenticarse contra su API. Puede especificar su clave de acceso así:
$ currency -> accessKey ( ' your-access-token-goes-here ' ); Para establecer más opciones de configuración, puede usar el método config() . Un ejemplo es la opción de formato JSON de CurrencyLayer.
$ currency -> config ( ' format ' , ' 1 ' ); Puede usar from() o source() para establecer la moneda base. Los métodos son idénticos.
! Nota: cada controlador establece su propia moneda base predeterminada. Fixerio usa
EURcomo moneda base, mientras que CurrencyLayer usaUSD.
La mayoría de los servicios solo le permiten cambiar la moneda base en sus planes pagados. El conductor lanzará un OtherguyCurrencyExceptionsApiException si su plan actual no permite cambiar la moneda base.
$ currency -> source ( Otherguy Currency Symbol:: USD );
$ currency -> from ( Otherguy Currency Symbol:: USD ); Puede usar to() o symbols() para establecer las monedas de retorno. Los métodos son idénticos. Pase una sola moneda o una variedad de símbolos de moneda a cualquiera de estos métodos.
! Nota: pase una matriz vacía para devolver todos los símbolos de divisas compatibles con este controlador. Este es el valor predeterminado si no llama al método en absoluto.
$ currency -> to ( Otherguy Currency Symbol:: BTC );
$ currency -> symbols ([ Otherguy Currency Symbol:: BTC , Otherguy Currency Symbol:: EUR , Otherguy Currency Symbol:: USD ]); Esto recupera los tipos de cambio más recientes y devuelve un objeto 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 Para recuperar los tipos de cambio históricos, use el método historical() . Tenga en cuenta que debe especificar una fecha como parámetro de método o utilizando los métodos date() . Consulte la interfaz fluida para obtener más información.
$ currency -> date ( ' 2010-01-01 ' )-> historical ();
$ currency -> historical ( ' 2018-07-01 ' ); Use el método convert() para convertir cantidades entre monedas.
! NOTA: La mayoría de los proveedores de API no permiten el acceso a este método utilizando su cuenta gratuita. Todavía puede usar las últimas tarifas o tarifas históricas de puntos finales y realizar cálculos o conversiones sobre el objeto
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, 2019La mayoría de los métodos se pueden utilizar con una interfaz fluida , lo que le permite encadenar el método de las llamadas para un código más legible:
// 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 (); Los puntos finales get() e historical() devuelven un objeto ConversionResult . Este objeto le permite realizar cálculos y conversiones fácilmente.
! NOTA: Aunque las cuentas gratuitas de la mayoría de los proveedores no le permiten cambiar la moneda base, aún puede usar el objeto
ConversionResultpara cambiar la moneda base más adelante. Sin embargo, esto podría no ser tan preciso como cambiar la moneda base directamente.
! NOTA: Para convertir entre dos monedas, debe solicitar ambas en su solicitud
get()ohistorical()inicial (). ¡No puede convertir entre monedas que no han sido obtenidas!
Consulte el siguiente código para obtener algunos ejemplos de lo que puede hacer con el objeto 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 );¡Las solicitudes de extracción son más que bienvenidas! Estoy luchando por la cobertura de prueba del 100% para este repositorio, así que asegúrese de agregar pruebas para su código.