Skip to content

Tudo para WordPress, desenvolvimento web — e não só

💰 API PHP para obter o preço atual do bitcoin em 2026: de um script simples a uma solução de produção

💰 API PHP para obter o preço atual do bitcoin em 2026: de um script simples a uma solução de produção

O site aceita criptomoeda e a taxa de câmbio oscila alguns pontos percentuais em meia hora. O cliente quer ver o preço atual do Bitcoin em moeda fiduciária diretamente na interface, não uma captura de ecrã de uma exchange, mas um número em tempo real obtido da API.

Monitorizar a taxa manualmente através de um separador do CoinMarketCap consome tempo e fornece dados desfasados. Entretanto, os plugins de criptomoedas prontos a usar são frequentemente pesados: anúncios, pedidos desnecessários, bloqueados a uma única fonte.

Abaixo estão duas formas de obter o preço atual do Bitcoin via PHP: desde um script básico de 10 linhas até uma solução pronta para produção com cache e seleção de fonte. Sem planos pagos, sem SDK de 40 megabytes.

💡 Visão geral rápida:

  • Escolher uma fonte de API: Bitpay (gratuito, sem necessidade de chave) ou CoinGecko (mais dados, também gratuito)
  • Escrever um script PHP com file_get_contents ou cURL, ambas as abordagens explicadas
  • Adicionar tratamento de erros e cache em ficheiro durante 5 minutos para evitar consultar a API em cada carregamento de página

O que é uma API de cotação de criptomoedas e porque é que um programador PHP precisa dela

As APIs de exchanges e agregadores de criptomoedas devolvem a taxa atual via HTTP: faz um pedido GET e recebe JSON com um par "BTC/USD" e um número. Não é necessário WebSocket nem subscrição: um script PHP normal num alojamento barato trata disso perfeitamente.

Cenários típicos onde isto é útil:

  • Gateway de pagamento. Mostrar ao utilizador: "Montante a pagar: 0,00031 BTC", com a taxa obtida de uma API em vez de ser inventada.
  • Painel de controlo. Um painel de administração de loja online com um bloco "Taxas de criptomoedas".
  • Rastreador de portefólio. Detém 5 moedas e um script atualiza o seu valor total uma vez por minuto.

Para este artigo, foram escolhidas duas fontes com acesso gratuito e sem registo: Bitpay e CoinGecko. Ambas funcionam sobre HTTPS, devolvem JSON e não requerem chave de API no nível básico.

Gráfico mostrando o número de transações de Bitcoin ao longo de um mês

Passo 1: obter a taxa via API da Bitpay

A Bitpay é um processador de pagamentos para Bitcoin. Tem um endpoint público /api/rates que devolve as taxas do BTC para mais de 150 moedas fiduciárias num único array JSON. Sem token, sem limites de pedidos para uso básico.

Abordagem simples: file_get_contents

O código funcional mais curto. Adicione-o a um ficheiro bitcoin-rates.php na raiz do seu site e abra-o num navegador:

1<?php
2$url = "https://bitpay.com/api/rates";
3$json = json_decode(file_get_contents($url), true);
4
5foreach ($json as $item) {
6 if ($item['code'] === 'USD') {
7 echo '1 BTC = $' . $item['rate'] . "\n";
8 }
9 if ($item['code'] === 'EUR') {
10 echo '1 BTC = €' . $item['rate'] . "\n";
11 }
12}

O script solicita o array completo de taxas, percorre-o e exibe apenas USD e EUR. O file_get_contents() com um URL HTTPS funciona se a diretiva allow_url_fopen = On estiver ativada no php.ini; na maioria dos fornecedores de alojamento está ativa por defeito.

Abordagem mais fiável: cURL

O file_get_contents não define timeouts e falha silenciosamente em erros de rede. Para um site real, o cURL é a melhor escolha:

1<?php
2$ch = curl_init();
3curl_setopt_array($ch, [
4 CURLOPT_URL => 'https://bitpay.com/api/rates',
5 CURLOPT_RETURNTRANSFER => true,
6 CURLOPT_TIMEOUT => 10,
7 CURLOPT_SSL_VERIFYPEER => true,
8]);
9$response = curl_exec($ch);
10$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
11curl_close($ch);
12
13if ($httpCode !== 200 || !$response) {
14 echo 'API temporarily unavailable.';
15 exit;
16}
17
18$data = json_decode($response, true);
19
20foreach ($data as $item) {
21 if ($item['code'] === 'USD') {
22 echo '1 BTC = $' . number_format($item['rate'], 2) . "\n";
23 }
24}

Um timeout de 10 segundos, verificação do código HTTP e number_format para uma saída legível. Na prática, um script como este é suficiente para incorporar a taxa no rodapé ou na barra lateral de um site.

Passo 2: fonte alternativa, API CoinGecko

A Bitpay apenas fornece taxas para BTC e BCH. Se também precisar de Ethereum, Solana ou qualquer outro ativo do top 500, ligue-se à API CoinGecko. O plano gratuito permite 10 a 30 pedidos por minuto sem chave.

Pedido simples para preços do Bitcoin e Ethereum

O endpoint /api/v3/simple/price aceita uma lista de moedas e moedas fiduciárias separadas por vírgulas através do parâmetro vs_currencies:

1<?php
2$url = 'https://api.coingecko.com/api/v3/simple/price'
3 . '?ids=bitcoin,ethereum'
4 . '&vs_currencies=usd,eur,rub';
5
6$ch = curl_init();
7curl_setopt_array($ch, [
8 CURLOPT_URL => $url,
9 CURLOPT_RETURNTRANSFER => true,
10 CURLOPT_TIMEOUT => 10,
11]);
12$response = curl_exec($ch);
13curl_close($ch);
14
15$prices = json_decode($response, true);
16
17echo 'BTC: $' . $prices['bitcoin']['usd'] . ' / €' . $prices['bitcoin']['eur'] . "\n";
18echo 'ETH: $' . $prices['ethereum']['usd'] . ' / ₽' . $prices['ethereum']['rub'] . "\n";

A resposta é compacta, contendo apenas as moedas e moedas fiduciárias que solicitou. Sem percorrer 150 entradas.

O que mais o CoinGecko pode fazer

  • Dados históricos: /api/v3/coins/bitcoin/history?date=01-01-2026, a taxa numa data específica.
  • Dados de mercado: /api/v3/coins/bitcoin, capitalização de mercado, volume, variação em 24 horas, oferta em circulação.
  • Moedas em tendência: /api/v3/search/trending, principais consultas de pesquisa do último dia.

Para uma simples taxa "BTC/USD", o primeiro exemplo é suficiente. Se estiver a construir um painel de controlo, ligue-se ao endpoint alargado.

Passo 3: cache e proteção contra falha da API

Consultar uma API externa em cada carregamento de página é uma má prática. A rede pode ter uma quebra, o servidor do CoinGecko pode ficar em baixo por um minuto e o visitante vê um erro em vez da taxa.

Uma solução robusta é a cache em ficheiro. O script guarda a resposta da API num ficheiro JSON local e atualiza-o uma vez a cada 5 minutos. Todos os pedidos intermédios leem da cache, instantaneamente e sem chamadas externas.

1<?php
2$cacheFile = __DIR__ . '/btc-cache.json';
3$cacheTime = 300; // 5 minutes
4
5// If cache is fresh — read it
6if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {
7 $data = json_decode(file_get_contents($cacheFile), true);
8 echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2);
9 echo ' (cached, updated ' . date('H:i:s', filemtime($cacheFile)) . ')';
10 exit;
11}
12
13// Cache is stale or missing — request API
14$ch = curl_init();
15curl_setopt_array($ch, [
16 CURLOPT_URL => 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd',
17 CURLOPT_RETURNTRANSFER => true,
18 CURLOPT_TIMEOUT => 10,
19]);
20$response = curl_exec($ch);
21$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
22curl_close($ch);
23
24if ($httpCode !== 200 || !$response) {
25 // API is down — serve stale cache if available
26 if (file_exists($cacheFile)) {
27 $data = json_decode(file_get_contents($cacheFile), true);
28 echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2);
29 echo ' (stale cache — API did not respond)';
30 exit;
31 }
32 echo 'No data available. Please try again later.';
33 exit;
34}
35
36// Save fresh response and output
37file_put_contents($cacheFile, $response);
38$data = json_decode($response, true);
39echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2);
40echo ' (fresh data)';

Note que o script verifica primeiro a cache e só chama a API quando necessário. Se a API não responder, a última taxa guardada é servida com uma etiqueta "cache desatualizada". O visitante vê um número, não uma página em branco com um erro.

Antes de implementar num site de produção, certifique-se de que o PHP tem permissões de escrita no diretório do script. Faça também uma cópia de segurança completa, uma vez que o script escreve um ficheiro em disco.

O vídeo acima fornece uma análise visual da API CoinGecko com exemplos de pedido e resposta em tempo real. É adequado se estiver a trabalhar com uma API de criptomoedas pela primeira vez e quiser ver o ciclo completo: do pedido GET à análise do JSON.

⁉️🤔 Perguntas frequentes

Qual API devo escolher, Bitpay ou CoinGecko?

Se apenas precisa da taxa de Bitcoin para dólar, opte pela Bitpay. É mais simples, devolve uma resposta como um array único sem parâmetros e não tem limites. Se planeia trabalhar com uma dúzia de moedas ou exibir gráficos, escolha o CoinGecko: mais dados, endpoints flexíveis e um plano gratuito que cobre as necessidades de um pequeno projeto.

A API da Bitpay requer uma chave de API?

O endpoint público /api/rates não requer uma chave. É um endpoint aberto usado por carteiras e exchanges para exibir taxas. Os endpoints comerciais da Bitpay (criação de faturas, aceitação de pagamentos) requerem um token, mas não são necessários para simplesmente obter taxas.

Porquê não a API do CoinMarketCap?

O plano gratuito do CoinMarketCap requer registo e uma chave. O limite é de 10.000 pedidos por mês, o que é suficiente para um pequeno projeto. No entanto, para uma abordagem "começar do zero sem registo", a Bitpay e o CoinGecko são mais convenientes: copie o URL, cole-o no seu código e funciona.

E se o meu alojamento bloquear o file_get_contents para URLs externos?

Mude para cURL, que está disponível em praticamente qualquer alojamento. Se o cURL também estiver desativado (raro em 2026), pergunte ao seu fornecedor de alojamento sobre a ativação do curl.so nas extensões PHP. Uma alternativa é usar o wp_remote_get() dentro do WordPress; esta função funciona através da API HTTP principal e seleciona automaticamente um transporte disponível.

Com que frequência as taxas são atualizadas na API?

A Bitpay atualiza a taxa a cada pedido; os valores refletem o spread atual do mercado. O CoinGecko atualiza os dados uma vez a cada 30 a 60 segundos para o endpoint de preço simples. Para fins de exibição num site, uma frequência de atualização de "uma vez a cada 5 minutos" é mais do que suficiente; o mercado de criptomoedas é volátil, mas não ao ponto de as flutuações segundo a segundo importarem para um bloco informativo.

Qual API escolher para a sua tarefa

A Bitpay e o CoinGecko respondem a necessidades diferentes sem competir diretamente:

  • Se está a construir um formulário de pagamento com conversão "BTC → USD", use a Bitpay: uma única linha de URL, código mínimo, taxas sempre atualizadas.
  • Se está a construir um painel de controlo com gráficos e um portefólio de 10 moedas, use o CoinGecko: pedidos de preços em lote, dados históricos, capitalização de mercado e volume numa única chamada.
  • Se precisa do início mais rápido possível sem dependências externas, use a Bitpay sem cURL via file_get_contents: 10 linhas de código e a taxa está na sua página.

Comece de forma simples: copie o primeiro exemplo deste artigo, substitua a moeda pela sua e abra-o num navegador. Se funcionar, envolva-o em cache usando o modelo do passo 3 e implemente no seu site de produção. Diga-nos nos comentários qual a API que acabou por escolher.