Bitcoin API и PHP – Базовое использование

Вы никогда не думали о продаже своих услуг в обмен на денежную единицу Bitcoin? Сегодня уже много крупных игроков на рынке делают это, начиная с OkCupid и Khan Academy, заканчивая даже WordPress-ом. Помимо этого, некоторые страны задумались об Bitcoin в качестве валюты. В этой серии уроков, мы познакомимся с Bitcoin API и Coinbase SDK.

Coinbase SDK

Для работы с Coinbase вы можете воспользоваться специальными инструментами и SDK, которые доступны абсолютно каждому (с некоторой оговоркой о цене).

Условия использования:

  • Приём платежей при помощи Coinbase осуществляется абсолютно бесплатно;
  • Вы соглашаетесь заплатить взнос (1%) в случае, если захотите перевести деньги на ваш банковский счет, но только если ваши продажи превышают $1.000.000 (один миллион долларов);
  • Минимальная сумма перевода в сети Bitcoin составляет 0,001 BTC. Используя Coinbase, можно понизить этот предел до 1 Satoshi (0,00000001 BTC);

Ещё одним важный момент: вы можете подключать услугу “Мгновенный обмен”. Данная услуга преобразует сумму платежа Bitcoin сразу в выбранную вами валюту без дополнительных действий.

Типы интеграции

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

Первый вариант заключается в использовании одного из инструментов Coinbase, а именно MerchantTools. Вы можете использовать кнопки, страницы и фрэймы. Если вы используете CMS или системой управления электронной коммерцией (WordPress, WooCommerce, Magento…), то наверняка найдёте много соответствующих плагинов.

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

Что мы можем сделать при помощи данного SDK?

  • продавать или покупать bitcoin-ы (или совершать валютный обмен);
  • отправить/запрашивать bitcoin-ы по электронной почте или по bitcoin адресу;
  • принимать платежи bitcoin как мерчант-сервис;
  • хранить bitcoin-ы в одном или нескольких кошельках;
  • иметь доступ к списку операций над bitcoin-ами (блоки, транзакции и т.д.);
  • обрабатывать текущие и микро платежи;

Всего по-немногу.

На данный момент существует три версии SDK: для Ruby, Java и PHP. Есть также много неофициальных библиотеки для других языков (Python, .NET, Node.js …). В нашем случае мы будем использовать PHP SDK, который вы можете найти на GitHub.

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

PHP SDK

Установка

Давайте начнем с установки пакета библиотеки. На GitHub-овскйо странице данного SDK вы не обнаружите возможность взаимодействия с Composer. Тем не менее, при помощи простого поиска можем найти соответствующий пакет coinbase/coinbase.

Для установки помещаем следующий код в файл composer.json:

1 {
2     "require": {
3         "coinbase/coinbase": "dev-master"
4     }
5 }

Далее используем composer (если он у вас установлен) для скачивания библиотеки:

1 composer update

Аутентификация

Перед тем как приступить к написанию кода, давайте поговорим об аутентификации. У разработчиков есть два варианта аутентификации, для получения доступа к методом API. Первый — это использование пары ключей API и API Secret. Второй, использование OAuth2.

Документация Coinbase вполне понятна: если вы намереваетесь взаимодействовать только с своим ??аккаунт-ом, вносить в него изменения, то можете использовать API Key. Если же вам необходимо, чтобы пользователь использовал свой аккаунт в рамках вашего приложения, то лучше всего воспользоваться OAuth2.

Ключ API + Secret

Создать ключ API очень просто, если у вас есть аккаунт Coinbase. Все, что вам нужно сделать, это перейти сюда и нажать на кнопку «+ New API Key».

Если вы делаете это впервые, то вам скорее всего придётся подтвердить аккаунт при помощи Authy.

Перед вами должна отобразиться следующая форма:

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

Для создания и активации ключа API нажмите сначала кнопку “Create”, а затем “Enable”.

OAuth 2.0

Если вы хотите использовать OAuth 2.0 , то сначала придётся пройти простую процедуру. На это раз вам нужно создавать не ключ API, тем не менее, а OAuth 2.0 приложение. Для этого отправляетесь по адресу https://coinbase.com/oauth/applications. Далее нажмите на кнопку “+ Create an Application”:

Заполните форму: укажите название вашего приложения, выберите иконку, а так же укажите список URL-адресов для будущих редиректов.

Примечание: каждый URL должен начинаться с (https://…). Другие варианты будет игнорироваться.

Кликните окей и все готово! После этого вы должны получите письмо с вашим новым ClientID и Client Secret. Это конечно не вся информация об аутентификации, более подробное описание можете найти на соответствующей странице.

Права

Для более безопасной работы с API вам предстоит иметь дело с правами доступа. Полный список прав:

  • all: полный доступ к вашей учетной записи;
  • merchant: создание платежных кнопок, форм, доступ к основой информации о продавце, редактирование своих данных и создание новых адресов;
  • balance: доступ к вашему реальным состоянию счёта;
  • buttons: создание кнопки оплаты;
  • buy: покупка bitcoin-ов;
  • contacts: предоставление списка ваших контактных данных;
  • orders: предоставление списка принятых заказов;
  • sell: продажа bitcoin-ов;
  • transactions: предоставление истории ваших сделок;
  • send: отправка определенного количества bitcoin-ов с вашего счета;
  • request: запрос bitcoin-ов с вашего счета;
  • transfers: предоставляет историю о покупках и продажах;
  • recurring_payments: предоставляет список регулярных платежей;
  • oauth_apps: просматривать, создавать и редактировать OAuth приложения;
  • reports: получение и создание новых отчетов;

Принципы работы с SDK

Теперь, когда у нас есть ключи и скачанная библиотека, можем приступать к дальнейшим шагам.

Прежде всего, давайте взглянем на осуществлении процедуры аутентификации.

Доступ по ключам API и Secret

1 $coinbase = Coinbase::withApiKey($coinbaseAPIKey, $coinbaseAPISecret);

Вставьте ключ API и API Secret в качестве параметров в метод withApiKey(). Далее для работы с SDK мы будем использовать объект $coinbase.

Доступ через OAuth

После создания OAuth приложения, нам нужно создать объект $coinbaseOauth, указав Client ID и Client Secret которые мы получили ранее. Как в этом примере:

1 $coinbaseOauth = new Coinbase_OAuth($_CLIENT_ID, $_CLIENT_SECRET, $_REDIRECT_URL);
2 header("Location: " . $coinbaseOauth->createAuthorizeUrl("all"));

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

1 $tokens = $coinbaseOauth->getTokens($_GET['code']);

Далее нам необходимо создать объект $coinbase, используя токен:

1 $coinbase = Coinbase::withOauth($coinbaseOauth, $tokens);

Независимо от того, каким способом мы прошли аутентификацию, процесс работы с объектом $coinbase один и тот же.

Доступ к данным

Получить ваши данные очень просто. Для этого воспользуемся объектом $coinbase.

Для проверки вашего баланса, выполните следующий код:

1 echo $coinbase->getBalance() . " BTC";

Вот как получить данные пользователя:

1 $user = $coinbase->getUser()
2
3 echo $user->name;
4 echo $user->email;
5 echo $user->time_zone;
6 echo $user->native_currency;

Используя объект $coinbase, мы так же можем получить информацию о продавце.

1 $user->merchant->company_name;
2 $user->merchant->logo;

Примечание: свойство logo возвращает URL-адрес логотипа.

Кроме того, мы можем получить контактные данные, вызвав метод getContacts().

1 $response = $coinbase->getContacts("user");
2
3 foreach($response->contacts as $contact)
4 {
5     echo $contact;
6     // '[email protected]'
7 }

Данные о валютах

SDK так же позволяет получить данные о валютах:

1 $currencies = $coinbase->getCurrencies();
2 echo $currencies[0]->name;

Метод getCurrencies() возвращает список всех активных валют (в формате ISO), доступных в системе Bitcoin. Вот как, можно получить некоторую информацию о валютных курсах:

1 $rates = $coinbase->getExchangeRate();
2
3 echo $rates->btc_to_usd;
4 // is the same as...
5 echo $coinbase->getExchangeRate('btc', 'usd');

В зависимости от параметров, которые мы передадим в getExchangeRate(), получим разный результат.

Так же вы можете получить информацию о валютном курсе при помощи методов getBuyPrice() и getSellPrice():

1 echo $coinbase->getBuyPrice('1');
2 // '125.31'
3 echo $coinbase->getSellPrice('1');
4 // '122.41'

Примечание: в данную сумму входит 1% сбора Coinbase и $0.15 банка.

Создание кнопки оплаты

Для создания кнопки оплаты воспользуйтесь методом createButton() с определенным набором параметров:

1 createButton($name, $price, $currency, $custom=null, $options=array())

… а вот и пример:

1 $paymentButton = $coinbase->createButton(
2     "Order #1",
3     "19.99",
4     "EUR",
5     "TRACKING_CODE_1",
6     array(
7         "description" => "1 item at 19.99"
8     )
9 );

Довольно просто, не так ли?

Первый параметр $name — это “название” платежа, который вы хотите создать. Далее идёт $price, сумма платежа. Потом этого, выберите валюту платежа , и $custom настройки для конкретного кода транзакций который будет отправлен вам после процедуры оплаты.

И наконец, $options позволит настроить внешний вид кнопки, настроить URL-адрес на который необходимо отправить пользователя при успешной или не успешной оплате. Больше информации об этом параметре можете найти на странице документации.

Для вывода самой кнопки, воспользуйтесь следующими полями:

1 echo $response->button->code;
2 // '93865b9cae83706ae59220c013bc0afd'
3
4 echo $response->embedHtml;
5 // '<div class=\"coinbase-button\" data-code=\"93865b9cae83706ae59220c013bc0afd\"></div><script src=\"https://coinbase.com/assets/button.js\" type=\"text/javascript\"></script>'

Остаётся вывести кнопку $response->embedHtml с помощью оператора echo.

Подводя итог

На этом первая часть завершена. Тут мы рассмотрели основы: установку библиотеки, а так же принципы работы с API. Во второй части рассмотрим отправку и получения денег. Оставайтесь с нами!