12.08.14, 16:57
0 комментарий
  Разное

Добавляем платежный шлюз Bitcoin на собственный сайт

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

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

Что такое Bitcoin?

Прежде всего, нужно выяснить, что же такое Bitcoin? Если вы не знакомы с данным термином, то Bitcoin представляет собой пиринговую валюту, разработанную с целью устранения необходимого участия третьих лиц в процессе оплаты, и вместо этого доверить безопасность в «руки» криптографических хэш-кодов.

Исключив наличие центрального регулирующего аппарата (будь то правительство или банк), вы можете получить гораздо более низкие издержки и требования. Теперь вам не нужно заполнять какие-то ненужные анкеты или платить кому-то зарплату, так как эти «деньги» способны защитить сами себя.

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

Преимущества и недостатки

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

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

* Ими может пользоваться любой человек по всему миру.
* Они предоставляют анонимность.
* Минимальная комиссия.
* Нет необходимости в установке дополнительного ПО.

Недостатки

* Ценность монет колеблется.
* На данный момент не столь популярна в сравнении с остальными валютами (CC, PayPal).

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

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

Другой недостаток заключается в нестабильной ценности Bitcoin. В начале прошлого года ценность одного BTC составляла примерно 12-14$, и всего за пару месяцев его ценность возросла до 240$ (Апрель), а сейчас ценность составляет порядка 600$ за каждый BTC. Это сильно отличает данную валюту от традиционных, так как ваши деньги в течение месяца могут увеличиться до 2000% в ценности, а назавтра спуститься до 50% ценности.

Добавляем платежный шлюз Bitcoin на собственный сайт


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

К счастью, большинство узлов обработки Bitcoin (как например тот, что мы будем сегодня использовать в образовательных целях) позволяют вам мгновенно конвертировать Bitcoin или их часть в традиционные валюты, будь то доллары США и другие. К примеру, вы можете создать установку, по которой 80% ваших заработанных Bitcoin будут незамедлительно конвертироваться в традиционные валюты, и тут же отправляться на ваш счет в банке, - это позволит вам сократить риски.

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

Сегодня в мире есть несколько популярных сервисов, включая Coinbase, BitPay и так далее, однако сегодня мы будем использовать сервис под названием BIPS.

Подготовительные работы

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

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

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

Настройка

Чтобы установить Slim, создайте файл 'composer.json' со следующим содержимым:

{
   "name": "bitcoin app",
   "require": {
       "slim/slim": "2.2.0"
   }
}


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

Далее, создайте папку 'public' с файлом 'index.php' внутри нее, а также папку 'views'.

Ваша структура должна быть похожа на следующее:

public/
    -> index.php
vendor/
views/  
composer.json


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

<?php
   require "../vendor/autoload.php";
 
   $app = new SlimSlim(array(
       "templates.path" => "../views"
   ));


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

$app->get('/', function() use ($app) {
   $app->render('home.php');
});


Дальше нам нужно добавить файл 'home.php' непосредственно в папку 'views'.

<!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>


Ничего особенного, просто форма для ввода email-адреса пользователя.

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

Создаем инвойс

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

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

$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-token, который вы сгенерировали для создания инвойсов, это 'username' в HTTP-аутентификации. POST-поля, которые мы высылаем, представляют собой следующее:

* price – стоимость объекта (значение int или float).
* currency – аббревиатура валюты USD, GBP, EUR или BTC для ценников, указанных в Bitcoin.
* item – наименование товара, этот пункт опционален, однако он будет показываться в инвойсе.
* custom – JSON-кодированная строка, содержащая любые пользовательские данные, которые вы хотите закрепить в инвойсе. Все это будет отображаться сразу после того, как пользователь проведет оплату, поэтому вы можете внести сюда просто внутренние телефонные номера. В нашем случае мы использовали только email, так как у нас нет больше никакой другой информации.

API-запрос вернет просто URL, ведущий к инвойсу, так что у нас будет возможность просто получить ответ, и перенаправить пользователя к нему.

Добавляем платежный шлюз Bitcoin на собственный сайт


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

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

Завершение платежа

Последний этап заключается в обработке самого платежа, уже после того, как оплата будет перечислена. Чтобы сделать это, вам нужно добавить callback URL и секретный ключ во вкладке Merchant в панели BIPS. Мы просто направляем его на путь '/ipn', с секретным ключом 'SECRETKEY'.

Добавляем платежный шлюз Bitcoin на собственный сайт


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

$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.

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" => "demo@email.com",
            "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-ключ, тему письма и текст сообщения, форму email/имя и поле, для кого предназначен email.

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

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

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


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

В завершение

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

Исходники в архиве.

СКАЧАТЬ

Вес файла
2.7 Kb

Реклама

Напишите своё мнение

  • acuteaggressiveair_kissangel
    badbbbeachbeee
    biggrinbig_bossblumblush
    boastbombboredombye
    clappingcraycrazycurtsey
    dancedashdeclarediablo
    diroldon-t_mentiondownloaddrinks
    first_moveflirtfocusfool
    friendsgive_heartgive_rosegood
    hangheartheathelp
    hihunterhystericireful
    kingkisslaughlazy
    lolmail1mambaman_in_love
    mdamega_shokmoilmosking
    musicneanegativenew_russian
    okon_the_quietpardonparting
    partypilotpioneerpleasantry
    popcormpranksterprevedpunish
    roflrtfmrussiansad
    sarcasticscarescratchsearch
    secretsensoredshokshout
    slowsmilesmokesoldier
    soldier_girlsorryspitefulspruce_up
    stinkersuicidesunsuperstition
    swoonteasetenderthanks
    thisto_pick_ones_noseto_take_umbragetreaten
    umnikunknwvampirevava
    victorywackowhistlewink
    wizardyahooyesyu
    e101e102e103e104
    e105e106e107e108
    e109e110e111e112
    e113e114e115e116
    e117e118e119e120
    e121e122e123e124
    e125e126e127e128
    e129e130e131e132
    e133e134e135e136
    e137e138e139e140
    e141e142e143e144
    e145e146e147e148
    e149e150e151e152
    e153e154e155e156
    e157e158e159e160
    e161e162e163e164
    e165e166e167e168
    e169e170e171e172
    e173e174e175e176
    e177e178e179e180
    e181e182e183e184
    e185e186e187e188
    e189e190e191e192
    e193e194e195e196
    e197e198e199e200
    e201e202e203e204