Статьи

Добавление обработки биткойн-платежей на ваш сайт

Биткойн определенно начал становиться все более популярным, и с его глобальным охватом и минимальными комиссионными, этот метод оплаты стоит рассмотреть.

В этой статье мы рассмотрим, что такое Биткойн, а также как начать принимать их в ваших приложениях.


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

Снимая центральный орган (правительство, банк и т. Д.), Вы снижаете комиссионные и снижаете требования. Нет необходимости заполнять формы или выплачивать зарплату людям, поэтому в некотором смысле деньги обеспечивают себя.

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


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

Преимущества:

  • Любой может использовать это глобально.
  • Несколько анонимно.
  • Минимальные комиссии.
  • Никаких настроек не требуется.

Недостатки:

  • Ценность монет колеблется.
  • Не так широко, как другие варианты (CC, Paypal).

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

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

Другим недостатком является стабильность стоимости биткойнов; в начале этого года стоимость одной биткойны составляла около 12–14 долл. США, всего за пару месяцев в апреле стоимость монет выросла почти до 240 долл. США, а в настоящее время их стоимость составляет около 110–115 долл. США каждая. Это сильно контрастирует с традиционными валютами: ваши деньги должны иметь повышение стоимости на 2000%, а затем снижение на 50%, и все это в течение нескольких месяцев кажется красным флагом.

предоставлено blockchain.info

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

К счастью, большинство процессоров Биткойн, например, тот, который я буду использовать в этой статье, позволяет мгновенно конвертировать биткойны или их часть в обычную валюту, например доллары. Например, вы можете настроить, чтобы 80% поступивших биткойнов были немедленно конвертированы и переведены на ваш банковский счет, удаляя этот элемент риска.

В конечном счете, вы можете как выиграть, так и проиграть от этих колебаний, поэтому вам решать, хотите ли вы играть в азартные игры и оставить больше в биткойнах, или устранить весь риск и конвертировать все это.

Это пара популярных сервисов, которые работают как Coinbase , BitPay и т. Д., Но в этой статье я буду использовать BIPS .


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

Эти три этапа полностью отделены, как и во всех вариантах оплаты, но здесь они более важны, поскольку вы не можете напрямую платить из формы покупки и вам нужно платить из своего собственного биткойн-кошелька.

Для этого приложения я буду использовать Slim, чтобы предоставить небольшую структуру, Mandrill для отправки продукта и, как я уже говорил, BIPS в качестве платежного процессора для реализации биткойнской стороны.


Итак, чтобы установить Slim, создайте файл composer.json со следующим:

1
2
3
4
5
6
{
   «name»: «bitcoin app»,
   «require»: {
       «slim/slim»: «2.2.0»
   }
}

Затем запустите composer install (при условии, что у вас установлен composer), чтобы установить зависимости.

Затем создайте общую папку с файлом index.php внутри нее и папкой представлений.

Ваша структура должна выглядеть примерно так:

1
2
3
4
5
public/
    -> index.php
vendor/
views/
composer.json

Теперь откройте файл index.php и давайте настроим приложение Slim:

1
2
3
4
5
6
<?php
   require «../vendor/autoload.php»;
 
   $app = new \Slim\Slim(array(
       «templates.path» => «../views»
   ));

Нам требуется автозагрузчик, а затем создание экземпляра библиотеки Slim, пока что просто шаблон. Далее, давайте добавим домашний маршрут, который будет стандартной HTML-страницей с формой для начала покупки:

1
2
3
$app->get(‘/’, function() use ($app) {
   $app->render(‘home.php’);
});

А затем нам нужно добавить сам home.php представления home.php в папку представлений:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE HTML>
<html>
<head>
    <title>Bitcoin App</title>
    <style>
        body {
            font-size: 1.6em;
            text-align: center;
            padding: 130px;
            font-family: sans-serif;
        }
    </style>
</head>
<body>
    <h1>Buy This</h1>
    <p>This is a great offer you should purchase this thing</p>
    <form action=»/» method=»POST»>
        <input type=»text» placeholder=»Enter your E-mail» name=»email»/>
        <input type=»submit» value=»Purchase !»>
    </form>
</body>
</html>

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

Последний этап настройки, который нам нужно выполнить, — это зарегистрироваться как в BIPS, так и в Mandrill (если вы его используете) и сгенерировать ключи API для обоих. В BIPS вы переходите на вкладку Merchant и генерируете ключ API для счета, а для Mandrill вы переходите на страницу SMTP & API Credentials для генерации нового ключа API.


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

Давайте добавим почтовый маршрут в файл index.php , который сгенерирует вызов API для создания нового счета и перенаправления пользователя на него:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$app->post(‘/’, function () use ($app) {
    $email = $req = $app->request()->post(’email’);
     
    if ($email) {
        $token = «BIPS_API_KEY»;
         
        $ch = curl_init(«https://bips.me/api/v1/invoice»);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, $token . «:»);
        curl_setopt($ch, CURLOPT_SSLVERSION,3);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array(
            «price» => 20,
            «currency» => «USD»,
            «item» => «PDF Book»,
            «custom» => json_encode(array(
                «users_email» => $email
            ))
        ));
        $invoiceUrl = curl_exec($ch);
        $app->redirect($invoiceUrl);
    }
});

Здесь следует обратить внимание на несколько вещей, например, маркер API, сгенерированный вами для создания счетов, является «именем пользователя» в HTTP-аутентификации. Поля POST, которые мы отправляем, следующие:

  • цена — цена объекта (значение типа int или float).
  • валюта — это валютная аббревиатура, например, доллары США, фунты стерлингов, евро или BTC для цен в самой биткойне.
  • предмет — название предмета, это необязательно, но оно будет отображаться в счете.
  • custom — строка в кодировке JSON, содержащая любые пользовательские данные, которые вы хотите прикрепить к накладной. Все, что будет указано здесь, будет возвращено после оплаты пользователем, так что вы можете поместить внутренние ссылочные номера или ключи в базу данных, в нашем примере я просто добавил электронное письмо, поскольку мы не храним никаких других данных.

Вызов API вернет только URL к самому счету, поэтому мы можем просто получить ответ и перенаправить прямо на него.

Теперь, в отличие от других способов оплаты, таких как кредитная карта или PayPal, нет третьей стороны, которая будет обрабатывать платеж, поэтому вы не можете просто ввести свой номер или логин для оплаты. Вместо этого он создает собственный кошелек для каждой транзакции и дает вам 15 минут для перевода указанной суммы на этот счет. Это то, о чем я говорил ранее, что с биткойнами вы замечаете различные этапы процесса оплаты больше, чем если бы вы покупали что-то одним нажатием на Amazon.

С другой стороны, преимуществом такой системы является врожденная безопасность, которая не требует никаких действий. Вы не имеете дело с номерами кредитных карт или обработкой платежей, поэтому сайт не должен быть настолько безопасным, вы просто создаете новую «личность» или кошелек, и если деньги переводятся туда, тогда платеж успешно завершен ,


Последний шаг — обработка фактической покупки после завершения платежа. Для этого необходимо добавить URL-адрес обратного вызова и секретный ключ на вкладке продавца на панели BIPS. Я просто собираюсь направить его на маршрут /ipn с секретным ключом SECRETKEY .

Обратный вызов — это POST-запрос, который содержит всю информацию о покупке, а также пользовательские данные, которые вы передали, и хеш-код для проверки его подлинности. Вы проверяете покупку с помощью хэширования ключа транзакции SHA-512 вместе с секретом, который вы установили в панели администратора, и проверяете, соответствует ли он вычисленному «хэшу» в запросе обратного вызова:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
$app->post(‘/ipn’, function () use ($app) {
    //Slim Request object
    $req = $app->request();
 
    //Get some variables from the request
    $email = $req->post(‘custom’)[’email’];
    $transactionKey = $req->post(‘transaction’)[‘hash’];
    $invoiceHash = $req->post(‘hash’);
    $status = $req->post(‘status’);
     
    //Hash the transaction key with the secret
    $secret = ‘SECRETKEY’;
    $hash = hash(«sha512», $transactionKey . $secret);
     
    //Verify it
    if ($invoiceHash === $hash && $status == 1) {
        //Paid
    }
});

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

Теперь у нас есть адрес пользователя и подтверждение платежа, поэтому последний шаг — отправить пользователю какой-либо товар. Если вы создаете службу подписки или какой-то физический элемент, вы можете просто зарегистрировать платеж пользователя в базе данных, но чтобы завершить эту статью, давайте кратко рассмотрим отправку элемента с помощью Mandrill.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
if ($invoiceHash === $hash && $status == 1) {
    //Mandrill URL + API key
    $url = «https://mandrillapp.com/api/1.0/messages/send.json»;
    $apiKey = «MANDRILL_API_KEY»;
 
    //Get Email Template
    $view = $app->view();
    $template = $view->fetch(«email.php»);
 
    //Message POST data
    $messageData = array(
        «key» => $apiKey,
        «message» => array(
            «html» => $template,
            «subject» => «Thank you for your Purchase :)»,
            «from_email» => «[email protected]»,
            «from_name» => «Your Name»,
            «to» => array(
                array(
                    «email» => $email
                )
            )
        )
    );
 
    //Send Request
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($messageData));
    curl_setopt($ch, CURLOPT_SSLVERSION,3);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
}

В приведенном выше коде все, что мы делаем, — это подготавливаем все данные и создаем запрос сообщения JSON для отправки в Mandrill API; Вам необходимо отправить ключ API, тему и сообщение электронной почты, адрес электронной почты / имя и адрес электронной почты.

Для сообщения мы используем встроенные шаблонные команды Slim, а затем отправляем запрос POST, используя curl и json_encode для компиляции данных в JSON.

Далее давайте создадим файл шаблона email.php (внутри папки views). Здесь вы можете разместить практически все, что захотите, так как он анализируется как обычный шаблон Slim, и мы просто возвращаем отображаемый HTML:

1
2
3
<h1>Thank you for your Purchase</h1>
 
<p>You can download the file <a href=»http://link-to-file»>here</a>.</p>

Я просто добавил заголовок со ссылкой на файл. Если все прошло хорошо, ваш сайт должен работать полностью.


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

Я знаю, что это может быть одна из самых дорогих демонстрационных версий, поэтому я получил эксклюзивную фотографию от талантливого веб-дизайнера Мелиссы Кейзер, которую вы можете приобрести в демоверсии, если хотите.

Я надеюсь, вам понравилась эта статья, и спасибо за чтение. Как всегда, если у вас есть какие-либо вопросы, не стесняйтесь оставлять мне комментарий ниже, в твиттере или в канале Nettuts + IRC на freenode.