Статьи

Биткойн и PHP с API Coinbase — Demo App

В первой части мы рассмотрели базовую установку и использование Coinbase Bitcoin PHP API и прилагаемого SDK. Во второй и последней части мы будем создавать пример приложения.

Отправлять и получать биткойны

Отправка или получение BTC с помощью Coinbase API — это действительно просто. Есть несколько интуитивно понятных методов, которые можно легко угадать: sendMoney() и requestMoney() .

Вот первый:

 public function sendMoney($to, $amount, $notes=null, $userFee=null, $amountCurrency=null) 

Первый параметр — «кто» получит деньги. Второй — это сумма, которую вы хотите отправить. Заметки о транзакциях будут доступны только получателям, которые также имеют учетную запись Coinbase. В противном случае сеть BTC не поддерживает это.

Давайте посмотрим на пример:

 $response = $coinbase->sendMoney($receiverAddress, "2"); 

Если вы хотите проверить свой статус транзакции, используйте свойство $response->transaction->status .

 echo $response->transaction->status; 

Вы также можете проверить результат:

 if($response->success) { echo 'Done.'; } 

Если вы хотите получить идентификатор транзакции, просто используйте $response->transaction->id .

Теперь давайте посмотрим, как вы можете запросить BTC. Вы должны будете использовать requestMoney() и это его синтаксис.

 $response = $coinbase->requestMoney($emailAddress, 10, "Maintenance Operation (10 BTC)"); 

Механизм, на этот раз, немного другой. Coinbase будет использовать указанный почтовый адрес в качестве первого параметра для отправки сообщения, в котором сама Coinbase объяснит нашему отправителю BTC, что делать и как это сделать.

Вот как проверить статус транзакции:

 echo $response->transaction->request ? 'true' : 'false'; // 'true' echo $response->transaction->id; // 'request_transaction_id' 

Вы также можете использовать некоторые методы для отмены или повторной отправки того же запроса, если у вас есть проблемы. В качестве ключа вам придется использовать ранее полученный ключ транзакции.

 $response = $coinbase->resendRequest('request_transaction_id'); echo $response->success ? 'true' : 'false'; // 'true' $response = $coinbase->cancelRequest('request_transaction_id'); echo $response->success ? 'true' : 'false'; // 'true' 

После того, как вы убедитесь, что процедура завершена, вам нужно вызвать метод completeRequest() .

Как это:

 $response = $coinbase->completeRequest('501a3554f8182b2754000003'); echo $response->success ? 'true' : 'false'; 

И это все!

Другие Методы

Система API часто обновляется, но пакет PHP может не обновляться всеми методами-оболочками вокруг API. Если вам нужно что-то «особенное», вы можете использовать методы get , post , put и delete для непосредственного взаимодействия с API.

 var_dump($coinbase->get('/account/balance')); // object(stdClass)#4 (2) { // ["amount"]=> // string(10) "0.56902981" // ["currency"]=> // string(3) "BTC" // } 

В этом конкретном примере мы использовали /account/balance , но тот же принцип применяется ко всем другим методам API. После первого параметра, имени метода, вы можете указать массив опций, если они вам нужны.

Мы сделали с основами. Теперь, когда мы знаем инструменты торговли, как насчет того, чтобы сделать действительно простое приложение для обработки платежей?

Первое приложение с Coinbase API

Пришло время создать простое первое реальное приложение, эмулирующее реальную ситуацию в мире. Предположим, у нас есть друг, которому принадлежит небольшая некоммерческая организация. Действительно важная причина: он решил посвятить свою жизнь защите прав разумных роботов.

Хорошо, они еще не существуют, но чем раньше вы начнете, тем скорее вы закончите!

Он наткнулся на эту вещь BTC, и он хочет сделать пожертвования с этой новой криптовалютой.

Нет проблем!

Все, что нам нужно сделать, это создать четыре простые страницы:

  • Страница приветствия: где пользователь будет указывать сумму пожертвования в BTC;
  • Страница оплаты: где мы создадим кнопку с помощью PHP SDK;
  • Страница благодарности: страница подтверждения, чтобы показать, когда пожертвование завершено;
  • Страница отмены: страница ошибок, отображаемая в случае ошибок во время процесса;

Установите SDK, как показано в части 1. После composer update вы будете готовы к работе.

The Welcome Page

Теперь давайте начнем со страницы приветствия. Создайте файл index.php который будет содержать следующий код.

 <!DOCTYPE html> <html> <head> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <title>Welcome! - The Sentient Robots Rights Organization</title> </head> <body> <div class="container"> <div class="starter-template" style="text-align:center; padding-top:50px;"> <h1>SRRO</h1> <h3>Sentient Robots Rights Organization</h3> <p><img src="logo.png" /></p> <p>Welcome, human! If you want to donate for our organization using bitcoin, enter your donation amount here.</p> <br/> <form action="payment.php" method="post"> <p><input type="text" class="form-control input-lg" placeholder="Enter BTC amount..." style="text-align:center;" name="amount" autofocus /></p> <p><button class="form-control btn-success">Donate Now! *</button></p> </form> <p>&nbsp;</p> <p><i>* by donating we are absolutely not responsible for what we do with your money... uhmm... maybe a yacht...</i></p> </div> </div><!-- /.container --> </body> </html> 

Примечание: как вы можете легко представить, я использовал Bootstrap через CDN, чтобы быстро настроить структуру и стиль для наших страниц. Не обращайте внимания на отсутствие фреймворка или смешение взглядов с логикой, это всего лишь демонстрация.

Ничего особенного: мы просто создали форму с полем ввода и кнопкой для отправки данных формы. После отправки данные будут отправлены на страницу payment.php . Здесь мы переходим к следующему шагу: payment.php .

 <?php require('includes/coinbase.inc.php'); ?> <!DOCTYPE html> <html> <head> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <title>Payment - The Sentient Robots Rights Organization</title> </head> <body> <div class="container"> <div class="starter-template" style="text-align:center; padding-top:50px;"> <h1>SRRO</h1> <h3>Sentient Robots Rights Organization</h3> <p><img src="logo.png" /></p> <p>It's time to pay. You decided to donate...</p> <p style="font-size:32px;"><b><?php echo $_POST['amount']; ?> BTC</b></p> <hr/> <?php echo $button->embedHtml; ?> <p>&nbsp;</p> </div> </div><!-- /.container --> </body> </html> 

Что у нас здесь? $_POST['amount'] — это сумма пожертвования, которую мы выбрали на предыдущем экране. Тогда у нас также есть $button->embedHTML .

Подожди подожди. Где находится эта кнопка?

Вы получили это: в другом файле, который включен здесь, includes/coinbase.php . Давайте создадим папку и файл. Это то, что мы собираемся вставить в это.

 <?php require('vendor/autoload.php'); $coinbaseAPIKey = 'MY_COINBASE_API_KEY'; $coinbaseAPISecret = 'MY_COINBASE_API_SECRET'; $coinbase = Coinbase::withApiKey($coinbaseAPIKey, $coinbaseAPISecret); if(!isset($_POST['amount'])) header('Location: index.php'); if (!preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $_POST['amount'])) header('Location: index.php'); $button = $coinbase->createButton( "Your Donation to SRRO", $_POST['amount'], "BTC", "", array( "description" => "My " . $_POST['amount'] . " BTC donation to SSRO", "cancel_url" => "http://localhost/coinbase/cancel.php", "success_url" => "http://localhost/coinbase/thanks.php" ) ); 

Первый required используется для загрузки SDK. Дальнейшие инструкции используются, соответственно:

  • объявите переменную $coinbaseAPIKey ;
  • объявите переменную $coinbaseAPISecret ;
  • создайте объект $coinbase который мы будем использовать для генерации нашей кнопки оплаты;

После этого немного проверки. Просто чтобы оставаться на безопасной стороне.

Примечание: это статья о Coinbase API, поэтому мы не будем углубляться в валидацию. В реальной ситуации все было бы иначе, и мы можем использовать множество инструментов и методов для создания лучшего (и более безопасного) кода.

Последний шаг — создание кнопки с использованием метода createButton . Я оставил четвертый параметр пустым, потому что в данном конкретном случае мне не требовался код отслеживания для моего заказа. Однако помните, что этот параметр вы должны использовать, если он вам нужен.

Теперь, когда у нас есть кнопка, мы можем отобразить ее код на странице payment.php .

Примечание: прежде чем создавать кнопки, заполните свой профиль продавца на веб-сайте Coinbase. Это необходимый шаг. Если вы этого не сделаете, вы будете заблокированы с фатальной ошибкой.

Теперь, когда у нас есть все, нам просто нужно настроить наши thanks.php и cancel.php . Вот они.

Это thanks.php .

 <!DOCTYPE html> <html> <head> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <title>Thank you! - The Sentient Robots Rights Organization</title> </head> <body> <div class="container"> <div class="starter-template" style="text-align:center; padding-top:50px;"> <h1>SRRO</h1> <h3>Sentient Robots Rights Organization</h3> <p><img src="logo.png" /></p> <p>&nbsp;</p> <p><b>Thank you!</b></p> <p>Hey, thank you for your donation! World is a better place now. Visit our site again in the future to follow our updates.</p> <p>Now <a href="index.php">go to index page and make another donation</a>.</p> </div> </div><!-- /.container --> </body> </html> 

… А это cancel.php : cancel.php :

 <!DOCTYPE html> <html> <head> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <title>Donation Cancelled - The Sentient Robots Rights Organization</title> </head> <body> <div class="container"> <div class="starter-template" style="text-align:center; padding-top:50px;"> <h1>SRRO</h1> <h3>Sentient Robots Rights Organization</h3> <p><img src="logo.png" /></p> <p>&nbsp;</p> <p>It seems something went wrong with your donation. <a href="index.php">Try again</a>...</p> </div> </div><!-- /.container --> </body> </html> 

Выполнено! Теперь мы абсолютно готовы начать принимать пожертвования для наших друзей-роботов.

Примечание: это довольно простой демонстрационный проект, и его полный код доступен на Github .

Вывод

Мы сделали это до конца этой серии. API Coinbase приятен в работе и прост в реализации. PHP SDK также часто обновляется, что показывает нам, что они заботятся о стабильности и сообществе.

Есть отзывы? Желает более глубокого освещения? Дайте нам знать в комментариях ниже!