def liqpay_callback(request): form = CallbackForm(request.POST or None) if not form.is_valid(): logger.warning('Invalid callback form, POST: {}'.format(request.POST)) return HttpResponse(status=400) data = form.cleaned_data['data'] signature = form.cleaned_data['signature'] default_conf = settings.LIQPAY_CONF[settings.DEFAULT_LIQPAY] additional_conf = settings.LIQPAY_CONF[settings.ADDITIONAL_LIQPAY] liqpay = LiqPay(default_conf['LIQPAY_PUBLIC_KEY'], default_conf['LIQPAY_PRIVATE_KEY']) our_sign = liqpay.str_to_sign(default_conf['LIQPAY_PRIVATE_KEY'] + data + default_conf['LIQPAY_PRIVATE_KEY']) if signature != our_sign: liqpay = LiqPay(additional_conf['LIQPAY_PUBLIC_KEY'], additional_conf['LIQPAY_PRIVATE_KEY']) our_sign = liqpay.str_to_sign(additional_conf['LIQPAY_PRIVATE_KEY'] + data + additional_conf['LIQPAY_PRIVATE_KEY']) if signature != our_sign: logger.warning('Invalid signature: our {}!={}'.format( our_sign, signature)) return HttpResponse(status=400) data = liqpay.decode_data_from_str(data) status = data.get('status') if status not in ('success', 'sandbox'): logger.warning('Status is not success: {} {} {} {}'.format(status, data.get('err_code'), data.get('err_description'), data)) return HttpResponse(status=400) try: order = LiqPayOrder.objects.get(order_id=data['order_id']) except LiqPayOrder.DoesNotExist: logger.warning('Wrong order_id: {}'.format(data['order_id'])) return HttpResponse(status=400) logger.info('Payment status={}: id={} amount={} {}'.format( status, order.order_id, data['amount'], data['currency'] )) result_received.send( sender=order, order_id=order.order_id, amount=data['amount'], currency=data['currency'], ) return HttpResponse('OK', status=200)
def get(self, request, *args, **kwargs): if request.user.is_authenticated: customer = Customer.objects.get(user=request.user) else: session_key=request.session.session_key name=str(session_key) user= User.objects.filter(username=name).first() customer = Customer.objects.filter(user=user).first() orders = Order.objects.filter(customer=customer).order_by('-id')[:1].first() # / if orders: liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) params = { 'action': 'pay', 'amount': int(orders.cart.final_price) , 'currency': 'UAH', 'description': 'Payment for clothes', 'version': '3', 'order_id': orders.id , 'sandbox': 0, # sandbox mode, set to 1 to enable it 'result_url':'https://mysite123456.herokuapp.com/', 'server_url': 'https://mysite123456.herokuapp.com/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}) else: return HttpResponseRedirect('/')
def post(self, request): liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) data = request.POST.get('data') signature = request.POST.get('signature') if not data or not signature: return Response({'POST data is not provided'}, status=status.HTTP_412_PRECONDITION_FAILED) sign = liqpay.str_to_sign(settings.LIQPAY_PRIVATE_KEY + data + settings.LIQPAY_PRIVATE_KEY) if sign == signature: response = liqpay.decode_data_from_str(data) end_date = datetime.fromtimestamp(int(response['end_date']) / 1e3) Payment.objects.create(payment_type=Payment.LiqPay, date=end_date, value=response['amount'], description=response['description'], liqpay_responce=response) return Response({'check': 'callback is valid'}, status=status.HTTP_200_OK) else: News.objects.create(title="Failed payment", text=data + ' ' + signature) return Response({'check': 'callback is not valid'}, status=status.HTTP_412_PRECONDITION_FAILED)
def hold_complete(self, id, amount): liqpay = LiqPay(public_key, private_key) res = liqpay.api( "request", { "action": "hold_completion", "version": "3", "amount": amount * 0.01, "order_id": id })
def post(self, request, *args, **kwargs): liqpay = LiqPay(settings.sandbox_i26660223217, settings.sandbox_u3BM9ppkXfPn0Phd5ZNhpkzieRiVWHmq12iJUJYb) data = request.POST.get('data') signature = request.POST.get('signature') sign = liqpay.str_to_sign(settings.sandbox_i26660223217 + data + settings.sandbox_u3BM9ppkXfPn0Phd5ZNhpkzieRiVWHmq12iJUJYb) if sign == signature: print('callback is valid') response = liqpay.decode_data_from_str(data) print('callback data', response) return HttpResponse()
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()
def pay(self, price, token): liqpay = LiqPay(public_key, private_key) res = liqpay.api( "request", { "action": "p2pcredit", "version": "3", "amount": price, "currency": "UAH", "description": "description text", "order_id": "order_id_1", "receiver_card_token": token, })
def get(self, request, *args, **kwargs): liqpay = LiqPay(settings.sandbox_i26660223217, settings.sandbox_u3BM9ppkXfPn0Phd5ZNhpkzieRiVWHmq12iJUJYb) params = { 'action': 'pay', 'amount': '100', 'currency': 'USD', 'description': 'Payment for medicines', 'order_id': 'order_id_1', 'version': '3', 'sandbox': 1, # 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})
def __init__(self, params, *args, **kwargs): self.params = {} if params is None else deepcopy(params) self.liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) self.action_url = urljoin(self.liqpay._host, constants.CHECKOUT_URL) self.params.update( version=constants.API_VERSION, sandbox=str( int(bool(params.get('sandbox', settings.LIQPAY_SANDBOX)))), ) initial = { 'data': self.liqpay.cnb_data(self.params), 'signature': self.liqpay.cnb_signature(self.params), } super().__init__(initial=initial, *args, **kwargs)
def get(self, request, *args, **kwargs): liqpay = LiqPay(LIQPAY_PUBLIC_KEY, LIQPAY_PRIVATE_KEY) amount = Replanishment.objects.get(id=request.session['payment_id']).ammount print request.user params = { 'action': 'pay', 'amount': amount, 'currency': 'UAH', 'description': 'Пополнение аккаунта', 'order_id': request.session['payment_id'], 'version': '3', 'sandbox': '1', 'server_url': 'https://%s/pay-callback/' % DOMAIN_NAME, } signature = liqpay.cnb_signature(params) data = liqpay.cnb_data(params) return render(request, self.template_name, {'signature': signature, 'data': data})
def get(self, request, *args, **kwargs): task = Task.objects.get(pk=kwargs['pk']) liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) params = { 'action': 'p2p', 'amount': str(task.estimated_price), 'order_id': str(task.pk), 'currency': 'UAH', 'description': 'Оплата за завдання #{}'.format(task.pk), 'version': '3', 'sandbox': settings.LIQPAY_SANDBOX_MODE, 'receiver_card': task.executor.worker_profile.card_number, 'server_url': settings.LIQPAY_SERVER_URL, } signature = liqpay.cnb_signature(params) data = liqpay.cnb_data(params) return render(request, self.template_name, {'signature': signature, 'data': data, 'task': task})
def get(self, request, bill: int): bill_pk = self.kwargs['bill'] # get the apartment try: bill = Bill.objects.get(pk=bill_pk) # return error HTTP_400_BAD_REQUEST if apartment does not exist except Bill.DoesNotExist: return Response(_('Bill with such id does not exist'), status=status.HTTP_400_BAD_REQUEST) # prepearing Liqpay data liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) params = { 'action': settings.LIQPAY_DEFAULT_ACTION, 'currency': settings.LIQPAY_DEFAULT_CURRENCY, 'language': settings.LIQPAY_DEFAULT_LANGUAGE, 'amount': str(bill.total_value), 'description': f'Payment for bill {bill.number}', 'order_id': bill_pk, 'version': '3', 'sandbox': 1, # sandbox mode, set to 1 to enable it 'server_url': 'https://dimonline.pp.ua:8443/payments/api/v1/pay_callback/', # url to callback view } signature = liqpay.cnb_signature(params) data = liqpay.cnb_data(params) return Response({ 'signature': signature, 'data': data }, status=status.HTTP_200_OK)
def post(self, request, *args, **kwargs): liqpay = LiqPay(LIQPAY_PUBLIC_KEY, LIQPAY_PRIVATE_KEY) data = request.POST.get('data') signature = request.POST.get('signature') sign = liqpay.str_to_sign(LIQPAY_PRIVATE_KEY + data + LIQPAY_PRIVATE_KEY) if sign == signature: print('callback is valid') response = liqpay.decode_data_from_str(data) if len(response) != 0: oreder_id = response['order_id'] status = response['status'] rep = Replanishment.objects.get(id=oreder_id) rep.status = status rep.save() if status == 'sandbox': profile = Profile.objects.get(user_id=rep.user_replanishment_id) profile.account = profile.account + decimal.Decimal(rep.ammount) profile.save() print('callback data', response) return HttpResponse()
def get(self, request, *args, **kwargs): liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY) params = { 'action': 'pay', 'amount': self.kwargs['price'], # 'amount': '0.01', 'currency': 'UAH', 'description': 'Оплата обуви, отправка с магазина Kicks Industry, г. Ужгород, ул. Льва Толстого, 5', '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 })
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: response =liqpay.decode_data_from_str(data) try: phone = response['sender_phone'] except: phone = '0' if phone != '0' and signature == sign: orders = Order.objects.get(id=response['order_id']) if response['status'] == 'success': orders.status_pay = 'pay' orders.save() x ='сумма платежа'+str(response['amount'])+ '... response order id==='+response['order_id']+'--status----'+response['status'] +'--phone'+phone +'Остальное -------'+str(response) send_mail('Платеж удачен!',x, "Yasoob",['*****@*****.**'], fail_silently=False) if response['status'] == 'failed': orders.status_pay='not_pay' orders.save() # x = '... response order id==='+response['order_id']+'--status----'+response['status'] +'--phone'+phone +'Остальное -------'+str(response) send_mail('Платеж отклонен!', "Yasoob",['*****@*****.**'], fail_silently=False) if response['status'] == 'reversed': orders.status_pay='reversed' orders.save() # x = '... response order id==='+response['order_id']+'--status----'+response['status'] +'--phone'+phone +'Остальное -------'+str(response) send_mail('Платеж возвращн', "Yasoob",['*****@*****.**'], fail_silently=False) if response['status'] == 'error': orders.status_pay = 'miss' orders.save() #написать если ошибка при оплате # x = ' ошибка при оплате '+' .order id==='+response['order_id']+'--status----'+response['status'] +'--phone'+phone +'Остальное -------'+str(response) send_mail('Платеж ошибка!', "Yasoob",['*****@*****.**'], fail_silently=False) result_url = 'https://mysite123456.herokuapp.com/' return HttpResponse()
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: response = liqpay.decode_data_from_str(data) if settings.LIQPAY_SANDBOX_MODE: expected_status = 'sandbox' else: expected_status = 'success' if response['status'] == expected_status: task = Task.objects.get(pk=int(response['order_id'])) task.status = Task.DONE task.save() create_notification_task.delay( task.executor.id, task.id, 'Оплата завдання', 'Завдання #{} було оплачено.'.format(task.id) ) return HttpResponse("OK") return HttpResponse("Oops! Something went wrong.")
def get_payment(order_id): ukraine = timezone(timedelta(hours=2)) data = CafeOrder.find_one({"order_id": str(order_id)}) if data is None: return "Замовлення не знайдено" data_to_send = { "version": 3, "public_key": UNIT_PUB_KEY, "action": "pay", "amount": str(data.price), "currency": "UAH", "description": "{order_id} від {datetime} За замовлення в UNIT.cafe".format( order_id=order_id, datetime=datetime.now( tz=ukraine).strftime("%Y-%m-%dT%H:%M:%S.%f")), "server_url": "https://unit.cafe/index.php?route=extension/payment/liqpay/callback", "result_url": "https://www.facebook.com/FriendlyFoodBot/", "order_id": order_id } liqpay = LiqPay(UNIT_PUB_KEY, UNIT_PRIV_KEY) try: html = liqpay.cnb_form(data_to_send) except: return "Замовлення не знайдено" return html
def setUp(self): self.liqpay = LiqPay('', '') self.maxDiff = None
import json from flask import Flask from liqpay import LiqPay app = Flask(__name__) app.config.update( SECRET_KEY='paymentApp', public_key='sandbox_i31321528342', private_key='sandbox_4E2WdIDxDV4KzdXeUkPlfqGwzt6ufXxsqqOaXpyz' ) lp = LiqPay( app.config.get('public_key'), app.config.get('private_key') ) payments = {} with open('./app/rooms.json', 'r') as f: rooms = json.load(f) from app import routes
def setUp(self): self.maxDiff = None self.liqpay = LiqPay('publicKey', 'privateKey')