Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

💰 PHP API do pobierania aktualnej ceny Bitcoin w 2026: od prostego skryptu do rozwiązania produkcyjnego

💰 PHP API do pobierania aktualnej ceny Bitcoin w 2026: od prostego skryptu do rozwiązania produkcyjnego

Strona akceptuje kryptowaluty, a kurs potrafi zmienić się o kilka procent w ciągu pół godziny. Klient chce widzieć aktualną cenę Bitcoin w walucie fiducjarnej bezpośrednio w interfejsie, nie zrzut ekranu z giełdy, tylko żywą wartość z API.

Ręczne monitorowanie kursu przez kartę CoinMarketCap zabiera czas i dostarcza dane z opóźnieniem. A gotowe wtyczki do kryptowalut są często przeładowane: reklamy, zbędne zapytania, powiązanie z jednym źródłem.

Poniżej dwa sposoby na pobranie bieżącej ceny Bitcoin przez PHP: od prymitywnego skryptu w 10 linijkach po wariant produkcyjny z cache'owaniem i wyborem źródła. Bez płatnych abonamentów, bez SDK ważącego 40 megabajtów.

💡 Szybki przegląd:

  • Wybieramy źródło API: Bitpay (bezpłatne, bez klucza) lub CoinGecko (więcej danych, również bezpłatne)
  • Piszemy skrypt PHP z file_get_contents lub cURL, oba warianty z objaśnieniem
  • Dodajemy obsługę błędów i plikowe cache'owanie na 5 minut, aby nie odpytywać API przy każdym odświeżeniu strony

Czym jest API notowań kryptowalut i do czego jest potrzebne programiście PHP

API giełd kryptowalut i agregatorów zwraca bieżący kurs przez HTTP, wykonuje Pan zapytanie GET, otrzymuje Pan JSON z parą „BTC/USD" i wartością liczbową. Żadnego WebSocket ani subskrypcji: zwykły skrypt PHP na tanim hostingu daje sobie radę.

Typowe scenariusze, w których jest to potrzebne:

  • Bramka płatnicza. Pokazać użytkownikowi: „Do zapłaty 0.00031 BTC", kurs nie jest wzięty z sufitu, tylko z API.
  • Dashboard. Panel administracyjny sklepu internetowego z blokiem „Kursy kryptowalut".
  • Tracker portfelowy. Zebrano 5 monet, skrypt raz na minutę aktualizuje ich łączną wartość.

Na potrzeby artykułu wybrano dwa źródła z bezpłatnym dostępem bez rejestracji: Bitpay i CoinGecko. Oba działają przez HTTPS, zwracają JSON i nie wymagają klucza API na poziomie podstawowym.

Wykres miesięcznej liczby transakcji Bitcoin

Krok 1: pobieramy kurs przez Bitpay API

Bitpay to procesor płatności dla Bitcoin. Posiada on publiczny endpoint /api/rates, który zwraca kursy BTC do ponad 150 walut fiducjarnych w jednej tablicy JSON. Nie ma tokena ani limitu liczby zapytań dla podstawowego zastosowania.

Prosty wariant: file_get_contents

Najkrótszy działający kod. Proszę dodać go do pliku bitcoin-rates.php w katalogu głównym strony i otworzyć w przeglądarce:

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}

Skrypt pobiera całą tablicę kursów, przechodzi przez nią w pętli i wyświetla tylko USD i EUR. file_get_contents() z adresem URL HTTPS działa, jeśli w php.ini włączona jest dyrektywa allow_url_fopen = On, na większości hostingów jest ona domyślnie aktywna.

Bardziej niezawodne podejście: cURL

file_get_contents nie ustawia limitów czasu i cicho pada przy błędzie sieciowym. W przypadku prawdziwej strony lepiej użyć cURL:

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 временно недоступно.';
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}

Limit czasu 10 sekund, sprawdzenie kodu HTTP, number_format dla czytelnego wyświetlenia. W praktyce taki skrypt wystarczy, aby osadzić kurs w stopce lub na pasku bocznym strony.

Krok 2: alternatywne źródło, CoinGecko API

Bitpay zwraca kursy tylko dla BTC i BCH. Jeśli potrzebne są również Ethereum, Solana lub dowolny inny zasób z top-500, podłączamy CoinGecko API. Bezpłatny plan daje 10-30 zapytań na minutę bez klucza.

Proste zapytanie o cenę Bitcoin i Ethereum

Endpoint /api/v3/simple/price przyjmuje listę monet oddzielonych przecinkami oraz waluty przez parametr 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";

Odpowiedź przychodzi w kompaktowej formie, tylko te monety i waluty, o które Pan poprosił. Żadnego iterowania w pętli po 150 rekordach.

Co jeszcze potrafi CoinGecko

  • Dane historyczne: /api/v3/coins/bitcoin/history?date=01-01-2026, kurs na konkretną datę.
  • Dane rynkowe: /api/v3/coins/bitcoin, kapitalizacja rynkowa, wolumen, zmiana w ciągu 24 godzin, podaż w obiegu.
  • Monety na czasie: /api/v3/search/trending, top zapytań wyszukiwania w ciągu doby.

Do prostego kursu „BTC/USD" wystarczy pierwszy przykład. Jeśli tworzy Pan dashboard, proszę podłączyć rozszerzony endpoint.

Krok 3: cache'owanie i ochrona przed awarią API

Odpytywanie zewnętrznego API przy każdym ładowaniu strony to zła praktyka. Sieć może mrugnąć, serwer CoinGecko paść na minutę, a odwiedzający zobaczy błąd zamiast kursu.

Niezawodne rozwiązanie: plikowe cache'owanie. Skrypt zapisuje odpowiedź API do lokalnego pliku JSON i odświeża go raz na 5 minut. Wszystkie zapytania pośrednie czytają cache, natychmiastowo i bez wywołań zewnętrznych.

1<?php
2$cacheFile = __DIR__ . '/btc-cache.json';
3$cacheTime = 300; // 5 минут
4
5// Если кеш свежий — читаем его
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 ' (кеш, обновлен ' . date('H:i:s', filemtime($cacheFile)) . ')';
10 exit;
11}
12
13// Кеш устарел или отсутствует — запрашиваем 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 упал — отдаем устаревший кеш, если он есть
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 ' (устаревший кеш — API не ответил)';
30 exit;
31 }
32 echo 'Нет данных. Попробуйте позже.';
33 exit;
34}
35
36// Сохраняем свежий ответ и выводим
37file_put_contents($cacheFile, $response);
38$data = json_decode($response, true);
39echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2);
40echo ' (свежие данные)';

Proszę zwrócić uwagę: skrypt najpierw sprawdza cache i tylko w razie potrzeby odwołuje się do API. Jeśli API nie odpowiada, zwracany jest ostatni zapisany kurs z adnotacją „przestarzały cache". Odwiedzający widzi wartość liczbową, a nie białą stronę z błędem.

Przed wdrożeniem na stronę produkcyjną proszę upewnić się, że PHP ma prawa do zapisu w folderze ze skryptem. I proszę wykonać pełny backup, skrypt zapisuje plik na dysku.

Na filmie powyżej wizualna analiza CoinGecko API z przykładami zapytań i odpowiedzi w czasie rzeczywistym. Przydatne, jeśli pracuje Pan z API kryptowalut po raz pierwszy i chce Pan zobaczyć pełny cykl: od zapytania GET do parsowania JSON.

⁉️🤔 Często zadawane pytania

Które API wybrać, Bitpay czy CoinGecko?

Jeśli potrzebny jest tylko kurs Bitcoin do dolara, proszę wziąć Bitpay. Jest prostszy, zwraca odpowiedź w jednej tablicy bez parametrów i nie ma limitów. Jeśli planuje Pan pracować z kilkunastoma monetami lub pokazywać wykresy, CoinGecko: więcej danych, elastyczne endpointy, a bezpłatny plan pokrywa potrzeby niewielkiego projektu.

Czy Bitpay API wymaga klucza API?

Publiczny endpoint /api/rates nie wymaga klucza. Jest to otwarty endpoint, z którego korzystają portfele i giełdy do wyświetlania kursów. Komercyjne endpointy Bitpay (tworzenie faktur, przyjmowanie płatności) wymagają tokena, ale do prostego pobrania kursu nie są one potrzebne.

Dlaczego nie CoinMarketCap API?

W CoinMarketCap bezpłatny plan wymaga rejestracji i wygenerowania klucza. Limit 10 000 zapytań miesięcznie dla małego projektu wystarcza. Jednak na start „od zera bez rejestracji" Bitpay i CoinGecko są wygodniejsze: skopiował Pan URL, wkleił do kodu, zadziałało.

Co zrobić, jeśli hosting blokuje file_get_contents dla zewnętrznych URL?

Proszę przejść na cURL, jest on dostępny praktycznie na każdym hostingu. Jeśli cURL również jest wyłączony (rzadkość w 2026 roku), proszę dopytać u dostawcy hostingu o możliwość włączenia curl.so w rozszerzeniach PHP. Alternatywa: użyć wp_remote_get() wewnątrz WordPress, ta funkcja działa przez HTTP API rdzenia i sama wybiera dostępny transport.

Jak często aktualizowane są kursy w API?

Bitpay aktualizuje kurs przy każdym zapytaniu, wartości odpowiadają bieżącemu spreadowi rynkowemu. CoinGecko aktualizuje dane co 30-60 sekund dla prostego endpointu ceny. Do wyświetlania na stronie częstotliwość „raz na 5 minut" jest w zupełności wystarczająca, rynek kryptowalut jest zmienny, ale nie na tyle, by sekundowe wahania miały znaczenie dla bloku informacyjnego.

Które API wybrać do swojego zadania

Bitpay i CoinGecko pokrywają różne potrzeby, nie konkurując ze sobą bezpośrednio:

  • Jeśli tworzy Pan formularz płatności z konwersją „BTC → USD", Bitpay: jeden wiersz URL, minimum kodu, kurs zawsze świeży.
  • Jeśli buduje Pan dashboard z wykresami i portfelem z 10 monet, CoinGecko: zapytanie o cenę paczką, dane historyczne, kapitalizacja rynkowa i wolumen w jednym wywołaniu.
  • Jeśli potrzebny jest maksymalnie szybki start bez zewnętrznych zależności, Bitpay bez cURL przez file_get_contents: 10 linijek kodu i kurs na stronie.

Proszę zacząć od prostego: skopiować pierwszy przykład z artykułu, zamienić walutę na swoją i otworzyć w przeglądarce. Gdy zadziała, proszę opakować to w cache'owanie według szablonu z kroku 3 i wdrożyć na stronę produkcyjną. A które API ostatecznie Pan wybrał, proszę napisać w komentarzach.