В этом уроке мы собираемся использовать API платежей Blockonomics для получения биткойнов на нашем веб -сайте.
BlockOnomics – это децентрализованное решение для оплаты биткойнов, которое предоставляет вам специализированные транзакционные инструменты для улучшения использования вашего BTC. С помощью Blockonomics вы можете генерировать биткойны, принимая его в своих интернет -магазинах, а также утилитарные функции, такие как создание счетов P2P, отправка электронных писем через биткойны и отслеживание адресов вашего кошелька.
Мы создадим интернет -магазин, который примет биткойны с использованием BlockOnomics платеж API Анкет Давайте начнем!
Технологический стек
- Джанго
- HTML/CSS
- JavaScript
Настройка
Перед началом работы вы можете настроить локальную версию этого урока, используя Репозиторий GitHub
git clone https://github.com/AJ-54/Blockonomics.git pip install -r requirements.txt
Убедитесь, что у вас есть ключ API Blockonomics. Чтобы получить его бесплатно, Создайте свою учетную запись и добраться до это страница.
Внутренняя папка Blockonomics, перейдите к настройки.py
Поместите и поместите свой API -ключ к Api_key
переменная
python manage.py migrate python manage.py runserver
Теперь, если вы пойдете в http://127.0.0.1:8000 , вы сможете увидеть тот же экран, что и у https://bloconomics.herokuapp.com
Http -обратный URL
Чтобы использовать API биткойнов платежей, вам нужно настроить URL -адрес заказа на крючке на своем Торговая страница на веб -сайте Blockonomics. Каждый раз, когда транзакция, выполняемая по адресу, связанному с вашим ключом API, изменяет свой статус, BlockOnomics будет использовать URL -адрес обратного вызова HTTP, предоставленный вами, чтобы уведомить вас о обновлении статуса. Кроме того, новые уведомления о транзакциях также предоставляются с использованием того же URL -адреса HTTP обратного вызова.
Логика
Чтобы интегрировать API платежа Blockonomics, вы должны знать, как работает процесс. Во -первых, вам нужна учетная запись Blockonomics и ваш ключ API. Далее вы должны использовать уникальный адрес биткойнов каждый раз, когда вы совершаете транзакцию. Вы можете запросить новый адрес, используя Новый адрес API Анкет Как только покупатель использует этот адрес биткойна для передачи суммы, вы получите обновление статуса от Blockonomics на Http -обратный URL
предоставлено вами. Таким образом, ваша логика бэкэнд должна обрабатывать запросы, полученные в этой конечной точке для классификации транзакций.
Платежное приложение
Я создал основное приложение Django под названием платежи
который отвечает за все.
Понимание моделей
Чтобы сохранить информацию о транзакциях, я создал Счет
стол. Стол выглядит так
class Invoice(models.Model): STATUS_CHOICES = ((-1,"Not Started"),(0,'Unconfirmed'), (1,"Partially Confirmed"), (2,"Confirmed")) product = models.ForeignKey("Product", on_delete=models.CASCADE) status = models.IntegerField(choices=STATUS_CHOICES, default=-1) order_id = models.CharField(max_length=250) address = models.CharField(max_length=250, blank=True, null=True) btcvalue = models.IntegerField(blank=True, null=True) received = models.IntegerField(blank=True, null=True) txid = models.CharField(max_length=250, blank=True, null=True) rbf = models.IntegerField(blank=True, null=True) created_at = models.DateField(auto_now=True)
Счет
В таблице хранится Продукт
Для которого создается счет -фактура, адрес
это адрес биткойна, используемый для этой транзакции. btcvalue
Это сумма, которую вы взимали от покупателя и получил
это сумма, которую вы получаете от покупателя. Оба эти значения будут в Сатоши. Самое важное поле – Статус
который описывает текущее состояние этой транзакции.
Создание платежного счета
Как только пользователь нажимает кнопку цены, мы обрабатываем запрос внутри create_payment
Посмотреть. Задача здесь состоит в том, чтобы создать новый объект в Счет
Таблица, а затем перенаправьте запрос на track_invoice
Посмотреть.
def exchanged_rate(amount): url = "https://www.blockonomics.co/api/price?currency=USD" r = requests.get(url) response = r.json() return amount/response['price'] def create_payment(request, pk): product_id = pk product = Product.objects.get(id=product_id) url = 'https://www.blockonomics.co/api/new_address' headers = {'Authorization': "Bearer " + settings.API_KEY} r = requests.post(url, headers=headers) print(r.json()) if r.status_code == 200: address = r.json()['address'] bits = exchanged_rate(product.price) order_id = uuid.uuid1() invoice = Invoice.objects.create(order_id=order_id, address=address,btcvalue=bits*1e8, product=product) return HttpResponseRedirect(reverse('payments:track_payment', kwargs={'pk':invoice.id})) else: print(r.status_code, r.text) return HttpResponse("Some Error, Try Again!")
HTTP -обратный вызов конечной точке URL
eCet_payment
View – это конечная точка для получения обновлений статуса от Blockonomics. Он используется для синхронизации нашего Счет
Таблица в базе данных с недавними транзакциями и их обновлениями статуса.
def receive_payment(request): if (request.method != 'GET'): return txid = request.GET.get('txid') value = request.GET.get('value') status = request.GET.get('status') addr = request.GET.get('addr') invoice = Invoice.objects.get(address = addr) invoice.status = int(status) if (int(status) == 2): invoice.received = value invoice.txid = txid invoice.save() return HttpResponse(200)
Отслеживание платежного счета
Вы можете отслеживать любой счет, если знаете идентификатор счета. track_invoice
Посмотреть получение последних данных этого идентификатора счета -фактуры из нашей базы данных и передает его на фронт. Он также передает, заплатил ли пользователь необходимую сумму, если да, то Оплаченный
Переменная также передается на фронт. На этом этапе вы можете добавить свою бизнес -логику.
def track_invoice(request, pk): invoice_id = pk invoice = Invoice.objects.get(id=invoice_id) data = { 'order_id':invoice.order_id, 'bits':invoice.btcvalue/1e8, 'value':invoice.product.price, 'addr': invoice.address, 'status':Invoice.STATUS_CHOICES[invoice.status+1][1], 'invoice_status': invoice.status, } if (invoice.received): data['paid'] = invoice.received/1e8 if (int(invoice.btcvalue) <= int(invoice.received)): data['path'] = invoice.product.product_image.url else: data['paid'] = 0 return render(request,'invoice.html',context=data)
Фронт -конец страницы счета
На фронте мы отобразили все данные, которые мы получаем из track_invoice
Посмотреть. Но когда статус транзакции обновляется, как покупатель узнает об этом? Чтобы решить эту проблему, мы можем либо постоянно объединить нашу базу данных, чтобы получить недавний статус этого счета, либо мы можем использовать WebSocket, предоставляемый BlockOnomics. Это Высоко Рекомендуется использовать WebSocket в качестве непрерывного опроса может оказывать серьезное влияние на производительность системы. BlockOnomics также продвигает обновление статуса через WebSocket, поэтому ваш фронт будет мгновенно знать изменения, поэтому вы знаете, что ваша страница теперь устарела. На этом этапе вы можете перезагрузить страницу, чтобы получить последние данные из rack_invoice
Просмотреть или использовать вызовы AJAX, чтобы сделать то же самое. Рекомендуется использовать время из 1 секунды, потому что eCet_payment
View займет некоторое время, чтобы обновить базу данных с подробностями, и как только вы дождитесь некоторое время, вы уверены, что ваша база данных обновляется, и, таким образом, вы можете выполнить действие.
var socket = new WebSocket("wss://www.blockonomics.co/payment/"+ address); socket.onmessage = function(event){ response = JSON.parse(event.data); //This condition ensures that we reload only when we get a //new payment status and don't go into a loop if (parseInt(response.status) > parseInt(status)) setTimeout(function(){window.location.reload() }, 1000); }
Конец
Видеоучебное пособие, объясняющее всю демонстрацию, прикреплена ниже. Если у вас есть вопросы, не стесняйтесь использовать раздел комментариев!
Оригинал: “https://dev.to/aj54/using-blockonomics-bitcoin-payments-api-5021”