
💰 PHP API для получения текущей цены Bitcoin в 2026: от простого скрипта до production-решения
Сайт принимает криптовалюту, а курс скачет на проценты за полчаса. Клиент хочет видеть актуальную цену Bitcoin в фиатной валюте прямо в интерфейсе, не скриншот с биржи, а живое число из API.
Ручной мониторинг курса через вкладку CoinMarketCap отнимает время и дает данные с задержкой. А готовые плагины под крипту часто перегружены: реклама, лишние запросы, привязка к одному источнику.
Ниже, два способа получить текущую цену Bitcoin через PHP: от примитивного скрипта на 10 строк до production-варианта с кешированием и выбором источника. Без платных тарифов, без SDK на 40 мегабайт.
💡 Быстрый обзор:
- Выбираем API-источник: Bitpay (бесплатный, без ключа) или CoinGecko (больше данных, тоже бесплатный)
- Пишем PHP-скрипт с file_get_contents или cURL, оба варианта с пояснением
- Добавляем обработку ошибок и файловое кеширование на 5 минут, чтобы не дергать API при каждом обновлении страницы
Что такое API криптокотировок и зачем оно PHP-разработчику
API криптобирж и агрегаторов отдает текущий курс по HTTP, вы делаете GET-запрос, получаете JSON с парой «BTC/USD» и цифрой. Никакого WebSocket или подписки: обычный PHP-скрипт на дешевом хостинге справляется.
Типичные сценарии, где это нужно:
- Платежный шлюз. Показать пользователю: «К оплате 0.00031 BTC», курс взят не с потолка, а из API.
- Дашборд. Админка интернет-магазина с блоком «Курсы криптовалют».
- Портфельный трекер. Собрал 5 монет, скрипт раз в минуту обновляет их суммарную стоимость.
Для статьи выбраны два источника с бесплатным доступом без регистрации: Bitpay и CoinGecko. Оба работают по HTTPS, отдают JSON и не требуют API-ключа на базовом уровне.

Шаг 1: получаем курс через Bitpay API
Bitpay, платежный процессор для Bitcoin. У него есть публичный endpoint /api/rates, который отдает курсы BTC к 150+ фиатным валютам одним JSON-массивом. Ни токена, ни лимита на число запросов для базового использования нет.
Простой вариант: file_get_contents
Самый короткий рабочий код. Добавьте его в файл bitcoin-rates.php в корне сайта и откройте в браузере:
1 <?php 2 $url = "https://bitpay.com/api/rates"; 3 $json = json_decode(file_get_contents($url), true); 4 5 foreach ($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 }
Скрипт запрашивает весь массив курсов, проходит по нему циклом и выводит только USD и EUR. file_get_contents() с HTTPS-URL работает, если в php.ini включена директива allow_url_fopen = On, на большинстве хостингов она активна по умолчанию.
Более надежный подход: cURL
file_get_contents не выставляет таймауты и молча падает при сетевой ошибке. Для реального сайта лучше взять cURL:
1 <?php 2 $ch = curl_init(); 3 curl_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); 11 curl_close($ch); 12 13 if ($httpCode !== 200 || !$response) { 14 echo 'API временно недоступно.'; 15 exit; 16 } 17 18 $data = json_decode($response, true); 19 20 foreach ($data as $item) { 21 if ($item['code'] === 'USD') { 22 echo '1 BTC = $' . number_format($item['rate'], 2) . "\n"; 23 } 24 }
Таймаут 10 секунд, проверка HTTP-кода, number_format для читаемого вывода. На практике такого скрипта достаточно, чтобы встроить курс в футер или сайдбар сайта.
Шаг 2: альтернативный источник, CoinGecko API
Bitpay отдает курсы только для BTC и BCH. Если нужны еще Ethereum, Solana или любой другой актив из топ-500, подключаем CoinGecko API. Бесплатный тариф дает 10-30 запросов в минуту без ключа.
Простой запрос цены Bitcoin и Ethereum
Эндпоинт /api/v3/simple/price принимает список монет через запятую и валюты через параметр 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(); 7 curl_setopt_array($ch, [ 8 CURLOPT_URL => $url, 9 CURLOPT_RETURNTRANSFER => true, 10 CURLOPT_TIMEOUT => 10, 11 ]); 12 $response = curl_exec($ch); 13 curl_close($ch); 14 15 $prices = json_decode($response, true); 16 17 echo 'BTC: $' . $prices['bitcoin']['usd'] . ' / €' . $prices['bitcoin']['eur'] . "\n"; 18 echo 'ETH: $' . $prices['ethereum']['usd'] . ' / ₽' . $prices['ethereum']['rub'] . "\n";
Ответ приходит компактный, только те монеты и валюты, которые запросили. Никакого перебора циклом по 150 записям.
Что еще умеет CoinGecko
- Исторические данные:
/api/v3/coins/bitcoin/history?date=01-01-2026, курс на конкретную дату. - Рыночные данные:
/api/v3/coins/bitcoin, market cap, volume, изменение за 24 часа, циркулирующее предложение. - Трендовые монеты:
/api/v3/search/trending, топ поисковых запросов за сутки.
Для простого курса «BTC/USD» хватит первого примера. Если делаете дашборд, подключайте расширенный эндпоинт.
Шаг 3: кеширование и защита от падения API
Дергать внешний API при каждой загрузке страницы, плохая практика. Сеть может моргнуть, сервер CoinGecko, лечь на минуту, а посетитель увидит ошибку вместо курса.
Надежное решение, файловое кеширование. Скрипт сохраняет ответ API в локальный JSON-файл и обновляет его раз в 5 минут. Все промежуточные запросы читают кеш, мгновенно и без внешних вызовов.
1 <?php 2 $cacheFile = __DIR__ . '/btc-cache.json'; 3 $cacheTime = 300; // 5 минут 4 5 // Если кеш свежий — читаем его 6 if (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(); 15 curl_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); 22 curl_close($ch); 23 24 if ($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 // Сохраняем свежий ответ и выводим 37 file_put_contents($cacheFile, $response); 38 $data = json_decode($response, true); 39 echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2); 40 echo ' (свежие данные)';
Обратите внимание: скрипт сначала проверяет кеш, и только при необходимости идет в API. Если API не отвечает, отдается последний сохраненный курс с пометкой «устаревший кеш». Посетитель видит число, а не белую страницу с ошибкой.
Перед установкой на боевой сайт убедитесь, что PHP имеет права на запись в папку со скриптом. И сделайте полный бэкап, скрипт пишет файл на диск.
В видео выше, визуальный разбор CoinGecko API с примерами запросов и ответов в реальном времени. Подходит, если вы впервые работаете с крипто-API и хотите увидеть полный цикл: от GET-запроса до парсинга JSON.
⁉️🤔 Частые вопросы
Какой API выбрать, Bitpay или CoinGecko?
Если нужен только курс Bitcoin к доллару, берите Bitpay. Он проще, отдает ответ одним массивом без параметров и не имеет лимитов. Если планируете работать с десятком монет или показывать графики, CoinGecko: больше данных, гибкие эндпоинты и бесплатный тариф покрывает потребности небольшого проекта.
Bitpay API требует API-ключ?
Публичный эндпоинт
/api/ratesключа не требует. Это открытый endpoint, которым пользуются кошельки и биржи для отображения курсов. Коммерческие эндпоинты Bitpay (создание инвойсов, прием платежей) требуют токен, но для простого получения курса они не нужны.
Почему не CoinMarketCap API?
У CoinMarketCap бесплатный тариф требует регистрации и выдачи ключа. Лимит, 10 000 запросов в месяц, для мелкого проекта хватает. Но для старта «с нуля без регистраций» Bitpay и CoinGecko удобнее: скопировал URL, вставил в код, заработало.
Что делать, если хостинг блокирует file_get_contents для внешних URL?
Переходите на cURL, он доступен практически на любом хостинге. Если отключен и cURL (редкость для 2026 года), уточните у хостера возможность включения
curl.soв PHP-расширениях. Альтернатива: использоватьwp_remote_get()внутри WordPress, эта функция работает через HTTP API ядра и сама выбирает доступный транспорт.
Насколько часто обновляются курсы в API?
Bitpay обновляет курс при каждом запросе, цифры соответствуют текущему рыночному спреду. CoinGecko обновляет данные раз в 30-60 секунд для простого price-эндпоинта. Для отображения на сайте частоты «раз в 5 минут» более чем достаточно, крипторынок волатилен, но не настолько, чтобы секундные колебания имели значение для информационного блока.
Какой API взять под свою задачу
Bitpay и CoinGecko закрывают разные потребности, не конкурируя напрямую:
- Если делаете платежную форму с конвертацией «BTC → USD», Bitpay: одна строчка URL, минимум кода, курс всегда свежий.
- Если строите дашборд с графиками и портфелем из 10 монет, CoinGecko: запрос цены пачкой, исторические данные, market cap и volume одним вызовом.
- Если нужен максимально быстрый старт без внешних зависимостей, Bitpay без cURL через
file_get_contents: 10 строк кода и курс на странице.
Начните с простого: скопируйте первый пример из статьи, замените валюту на свою и откройте в браузере. Заработало, оборачивайте в кеширование по шаблону из шага 3 и ставьте на боевой сайт. А какой API в итоге выбрали, напишите в комментариях.



