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)
Exemple #2
0
 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('/')
Exemple #3
0
    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)
Exemple #4
0
 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
         })
Exemple #5
0
 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()
Exemple #6
0
 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()
Exemple #7
0
 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,
         })
Exemple #8
0
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})
Exemple #9
0
 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)
Exemple #10
0
 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})
Exemple #11
0
 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})
Exemple #12
0
    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)
Exemple #13
0
    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()
Exemple #14
0
 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
     })
Exemple #15
0
    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()
Exemple #16
0
    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.")
Exemple #17
0
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
Exemple #18
0
 def setUp(self):
     self.liqpay = LiqPay('', '')
     self.maxDiff = None
Exemple #19
0
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
Exemple #20
0
 def setUp(self):
     self.maxDiff = None
     self.liqpay = LiqPay('publicKey', 'privateKey')