Version: | 1.1.0 |
---|---|
Web: | https://www.liqpay.ua/ |
Download: | https://pypi.python.org/pypi/liqpay-python |
Source: | https://github.com/liqpay/sdk-python |
Documentation: | https://www.liqpay.ua/documentation/en/ |
Keywords: | liqpay, privat24, privatbank, python, internet acquiring, P2P payments, two-step payments |
- Python 2.7 (deprecated)
- Python 3.11
- Sign up in https://www.liqpay.ua/en/authorization.
- Create a company.
- In company settings, on API tab, get Public key and Private key.
- Done.
From pip
$ pip install liqpay-python
From github
$ pip install git+https://github.com/liqpay/sdk-python#egg=liqpay
If you need debugging API Callback on local environment use https://localtunnel.github.io/www/
Backend
liqpay = LiqPay(public_key, private_key) html = liqpay.cnb_form({ 'action': 'pay', 'amount': '1', 'currency': 'USD', 'description': 'description text', 'order_id': 'order_id_1', 'version': '3' })
Frontend
Variable html
will contain next html form
<form method="POST" action="https://www.liqpay.ua/api/3/checkout" accept-charset="utf-8"> <input type="hidden" name="data" value="eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgImFjdGlv biIgOiAicGF5IiwgImFtb3VudCIgOiAxLCAiY3VycmVuY3kiIDogIlVTRCIsICJkZXNjcmlwdGlv biIgOiAiZGVzY3JpcHRpb24gdGV4dCIsICJvcmRlcl9pZCIgOiAib3JkZXJfaWRfMSIgfQ=="/> <input type="hidden" name="signature" value="QvJD5u9Fg55PCx/Hdz6lzWtYwcI="/> <script type="text/javascript" src="https://static.liqpay.ua/libjs/sdk_button.js"></script> <sdk-button label="Сплатити" background="#77CC5D" onClick="submit()"></sdk-button> </form>
Backend
views.py
from liqpay import LiqPay from django.views.generic import TemplateView from django.shortcuts import render from django.http import HttpResponse class PayView(TemplateView): template_name = 'billing/pay.html' 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}) @method_decorator(csrf_exempt, name='dispatch') class PayCallbackView(View): def post(self, request, *args, **kwargs): liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) data = request.POST.get('data') signature = request.POST.get('signature') sign = liqpay.str_to_sign(settings.LIQPAY_PRIVATE_KEY + data + settings.LIQPAY_PRIVATE_KEY) if sign == signature: print('callback is valid') response = liqpay.decode_data_from_str(data) print('callback data', response) return HttpResponse()
urls.py
from django.conf.urls import url from billing.views import PayView, PayCallbackView urlpatterns = [ url(r'^pay/$', PayView.as_view(), name='pay_view'), url(r'^pay-callback/$', PayCallbackView.as_view(), name='pay_callback'), ]
Frontend
<div id="liqpay_checkout"></div> <script> 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 }); }; </script> <script src="//static.liqpay.ua/libjs/checkout.js" async></script>