Рубрики
Без рубрики

Использование API BlockOnomics Bitcoin Payments API

В этом уроке мы собираемся использовать API платежей Blockonomics для получения биткойнов в нашей сети … Помечено с начинающими, Django, JavaScript, Python.

В этом уроке мы собираемся использовать 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”