Um invólucro da API PHP para oferecer uma interface de programação unificada para APIs de taxa de moeda popular.
Não se preocupe com o seu serviço de conversão de moeda favorito de repente, desligando ou alternando os planos de você. Mude facilmente, sem alterar seu código.
Eu precisava de uma API de conversão de moeda para o meu site de viagens, mas não consegui encontrar um bom pacote PHP. A idéia do pacote Rackbeat/php-currency-api chegou mais próxima, mas infelizmente era apenas um stub e não foi implementado.
| Serviço | Identificador |
|---|---|
| Fixerio | fixerio |
| CurrencyLayer | currencylayer |
| Taxas de câmbio aberto | openexchangerates |
| API das taxas de câmbio | exchangeratesapi |
Se você quiser ver mais serviços adicionados, fique à vontade para abrir um problema!
PHP 8.x ou PHP 7.3+ ou superior (testado em 7.3 e 7.4 )composer para php Simplesmente exige o pacote usando composer e você está pronto para ir!
$ composer require otherguy/php-currency-api A OtherguyCurrencySymbol fornece constantes para cada moeda suportada.
! NOTA: Você não é obrigado a usar
OtherguyCurrencySymbolpara especificar símbolos. É simplesmente um ajudante de conveniência e não precisa ser usado. Você pode simplesmente passar strings como'USD', 'EUR', ...para todos os métodos.
// 'USD'
$ symbol = Otherguy Currency Symbol:: USD ; Use o método all() para recuperar uma matriz de todos os símbolos de moeda:
// [ 'AED', 'AFN', ... 'ZWL' ]
$ symbols = Otherguy Currency Symbol:: all (); O método names() retorna uma matriz associativa com nomes de moeda:
// [ 'AED' => 'United Arab Emirates Dirham', 'AFN' => 'Afghan Afghani', ... ]
$ symbols = Otherguy Currency Symbol:: names (); Para obter o nome de uma única moeda, use o 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 obter uma lista de drivers suportados, use o método getDrivers() :
// [ 'mock', 'fixerio', 'currencylayer', ... ]
$ drivers = Otherguy Currency DriverFactory:: getDrivers ()A maioria dos provedores de API exige que você se inscreva e use sua chave de acesso emitida para autenticar contra a API deles. Você pode especificar sua chave de acesso como assim:
$ currency -> accessKey ( ' your-access-token-goes-here ' ); Para definir mais opções de configuração, você pode usar o método config() . Um exemplo é a opção de formatação JSON do CurrencyLayer.
$ currency -> config ( ' format ' , ' 1 ' ); Você pode usar from() ou source() para definir a moeda base. Os métodos são idênticos.
! Nota: Cada driver define sua própria moeda base padrão. O Fixerio usa
EURcomo moeda base, enquanto o CurrencyLayer usaUSD.
A maioria dos serviços apenas permite que você altere a moeda base em seus planos pagos. O motorista lançará uma OtherguyCurrencyExceptionsApiException se o seu plano atual não permitir alterar a moeda base.
$ currency -> source ( Otherguy Currency Symbol:: USD );
$ currency -> from ( Otherguy Currency Symbol:: USD ); Você pode usar to() ou symbols() para definir as moedas de retorno. Os métodos são idênticos. Passe uma moeda única ou uma matriz de símbolos de moeda para qualquer um desses métodos.
! Nota: passe uma matriz vazia para retornar todos os símbolos da moeda suportados por esse driver. Este é o padrão se você não chamar o método.
$ currency -> to ( Otherguy Currency Symbol:: BTC );
$ currency -> symbols ([ Otherguy Currency Symbol:: BTC , Otherguy Currency Symbol:: EUR , Otherguy Currency Symbol:: USD ]); Isso recupera as taxas de câmbio mais recente e retorna um 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 as taxas de câmbio histórico, use o método historical() . Observe que você precisa especificar uma data como um parâmetro de método ou usando os métodos date() . Consulte a interface fluente para obter mais informações.
$ currency -> date ( ' 2010-01-01 ' )-> historical ();
$ currency -> historical ( ' 2018-07-01 ' ); Use o método convert() para converter valores entre as moedas.
! Nota: a maioria dos provedores de API não permite o acesso a esse método usando sua conta gratuita. Você ainda pode usar as taxas mais recentes ou pontos de extremidade das taxas históricas e executar cálculos ou conversões no 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, 2019A maioria dos métodos pode ser usada com uma interface fluente , permitindo que você encorrente o método exige um código mais legível:
// 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 (); Os pontos finais get() e historical() retornam um objeto ConversionResult . Este objeto permite que você execute cálculos e conversões facilmente.
! Nota: Embora as contas gratuitas da maioria dos provedores não permitam alterar a moeda base, você ainda pode usar o objeto
ConversionResultpara alterar a moeda base posteriormente. Isso pode não ser tão preciso quanto alterar a moeda base diretamente.
! Nota: para converter entre duas moedas, você precisa solicitar as duas no seu pedido inicial
get()ouhistorical(). Você não pode converter entre moedas que não foram buscadas!
Consulte o código a seguir para obter alguns exemplos do que você pode fazer com o 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 );Solicitações de tração são mais do que bem -vindas! Estou buscando uma cobertura de teste 100% para este repositório, portanto, adicione testes para o seu código.