В первой части мы рассмотрели базовую установку и использование 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
вы будете готовы к работе.
Теперь давайте начнем со страницы приветствия. Создайте файл 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> </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> </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> </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> </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 также часто обновляется, что показывает нам, что они заботятся о стабильности и сообществе.
Есть отзывы? Желает более глубокого освещения? Дайте нам знать в комментариях ниже!