Beispiel #1
0
def return_request(request):
    p24 = Privat24Integration()
    post_data, payment, result = p24.get_transaction(request)
    if payment:
        order = None
        try:
            order, order_json = get_order(post_data.get("order"))
        except FraudAttemptError as e:
            logger.error(u"return_request: Have error: %s" % e.message)
        if order:
            local_json = order2json(order)
            if local_json == order_json:
                if order.transaction_id == payment.pk:
                    pass
                else:
                    order.transaction = payment
                    order.save()
                valid_statuses = p24.get_valid_statuses(True)
                # logger.info("return_request: valid_statuses: %s" % valid_statuses)
                # logger.info("return_request: payment state: %s" % payment.state)
                if payment.state in valid_statuses:
                    if payment.state == P24_STATE_WAIT:
                        pass
                    else:
                        if can_proceed(order.pay):
                            order.pay()
                            order.save()
                    # request.session[ORDER_ID] = order.pk
                    to = reverse("payments-thank-you")
                    return redirect(to)
            else:
                logger.error("return_request: Order properties is not identical:")
                logger.error("return_request:   Local: %s" % local_json)
                logger.error("return_request:  Remote: %s" % order_json)
    return redirect("home")
Beispiel #2
0
 def test(self):
     p24 = Privat24Integration()
     order = OrderFactory.create(
         sum=452.22,
     )
     order_json = order2json(order)
     order_crypted = encrypt(get_password(), order_json)
     fields = {
         "amt": order.sum,
         "ccy": "UAH",
         "order": order_crypted,
         "details": "something happens",
     }
     p24.add_fields(fields)
     payment = u'amt={amt}&ccy={ccy}&details={details}&ext_details=&pay_way={pay_way}&order={order}&merchant={merchant}&state=test&date=160114183814&ref=test payment&payCountry=UA'.format(**p24.fields)
     signature = p24.build_signature(payment)
     data = {
         'payment': payment,
         'signature': signature,
     }
     session = self.client.session
     session['ORDER_PK'] = order.pk
     session.save()
     resp = self.client.post(reverse('payments-return'), data=data)
     self.assertRedirects(resp, reverse('payments-thank-you'), status_code=302, target_status_code=200)
Beispiel #3
0
def update_order(transaction):
    import logging
    from django_fsm import can_proceed
    from orders.utils import get_order, order2json, FraudAttemptError
    from privat24.integration import Privat24Integration
    logger = logging.getLogger('app')
    try:
        order, order_json = get_order(transaction.get('order'))
    except FraudAttemptError as e:
        logger.error(u'update_order: Have error: %s' % e.message)
    if order:
        local_json = order2json(order)
        if local_json == order_json:
            if order.transaction_id == transaction.pk:
                pass
            else:
                order.transaction = transaction
                order.save()
            p24 = Privat24Integration()
            valid_statuses = p24.get_valid_statuses()
            if transaction.state in valid_statuses:
                if can_proceed(order.pay):
                    order.pay()
                    order.save()
        else:
            logger.error("update_order: Order properties is not identical:")
            logger.error("update_order:   Local: %s" % local_json)
            logger.error("update_order:  Remote: %s" % order_json)
    return None
Beispiel #4
0
def order_preview(request):
    order_id = request.session.get(ORDER_ID, 0)
    template = "check/order_preview.html"
    order = get_object_or_404(Order, pk=order_id)
    order_json = order2json(order)
    order_crypted = encrypt(get_password(), order_json)
    ctx = {"order": order}
    p24 = Privat24Integration(
        {
            "amt": order.sum,
            "ccy": "UAH",
            "order": order_crypted,
            "details": _("Purchases in the store Minishop"),
            "form_class": PaymentForm,
        }
    )
    ctx["integration"] = p24
    return render(request, template, ctx)