Интеграция платежной системы LiqPay с помощью API

1,00
р.
Есть интернет-магазин на Django. Хочу подключить к нему платежную систему LiqPay через API. В документации сказано, как формировать json-данные. Я создал класс, который формирует json-данные и кодирует их с помощью base64 и hashlib. Вот он:
import json import base64 import hashlib
class Json_Data(): def __init__(self, order, cart): self.order = order #order_id = order.id #total_price = cart.get_total_price() self.cart = cart self.data = {"public_key": "i5852363076", "version": 3, "action": "pay", "amount": str(self.cart.get_total_price()), "currency": "UAH", "description":"Оплата заказа", "order_id": str(self.order.id} self.private_key = '***********************************' def json_data_value(self): self.encode_data = base64.b64encode(json.dumps(self.data).encode("utf-8")).decode("utf-8") print(self.data) print(self.encode_data) def json_signature_value(self): signature = (self.private_key + self.encode_data + self.private_key).encode("utf-8") encode_signature = base64.b64encode(hashlib.sha1(signature).digest()).decode("ascii") print(encode_signature)
Далее я вызываю этот класс, в части views.py, которая формирует заказ и отсылаю уже готовые закодированные данные на страницу pay_online.html. Вот она:
if order.way_of_delivery == 'НП': json_data = Json_Data(order, cart) data = json_data.json_data_value() signature = json_data.json_signature_value() return render(request, 'order/pay_online.html', {'data': data, 'signature': signature})
Код в pay_online.html выглядит вот так (форма взята из документации LiqPay):
{{form.as_p}}

{% csrf_token %}

Но когда меня перекидывает на страницу платежа, я получаю ошибку INVALID_JSON...
Также я попытался использовать на странице pay_online платежный виджет вместо формы сверху:
window.LiqPayCheckoutCallback = function() { LiqPayCheckout.init({ data: "{{ data }}", signature: "{{ signature }}", embedTo: "#liqpay_checkout", mode: "embed" // embed || popup, }).on("liqpay.callback", function(data){ console.log(data.status) console.log(data) }).on("liqpay.ready", function(data){ // ready }).on("liqpay.close", function(data){ // close }) }
Когда я передаю сюда свои data и signature, то виджет просто не отображается. Когда я просто копирую скрипт виджета с документации LiqPay, не вставляю туда свои data и signature, то виджет отбражается коректно.
Я так понимаю, проблема, скорее всего в том, что я неправильно формирую json-данные и передаю их также не верно.
Обьясните, кто может, как вообще правильно интегрировать эту платежную систему и в чем, конкретно здесь, мои ошибки?

Ответ
для пайтона есть библиотека, вот страница на гитхабе https://github.com/liqpaydk-python
Там есть и о том как прикрутить виджет к Django.
также тут есть примеры ее использования https://www.liqpay.ua/documentation/api/p2p_credit/doc
Виджет
def get(self, request, *args, **kwargs): liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) params = { 'action': 'pay', 'amount': '100', 'currency': 'USD', 'description': 'Payment for clothes', 'order_id': 'order_id_1', 'version': '3', 'sandbox': 0, # sandbox mode, set to 1 to enable it 'server_url': 'https://test.com/billing/pay-callback/', # url to callback view } signature = liqpay.cnb_signature(params) data = liqpay.cnb_data(params) return render(request, self.template_name, {'signature': signature, 'data': data})
И важно то, что ваши методы класса Json_Data, ничего не возвращают, а вы этого ждете
data = json_data.json_data_value() signature = json_data.json_signature_value()
И data и signature будут None. В общем используйте готовую библиотеку и будет вам счастье