Exemplo n.º 1
0
 def get(self, request):
     order_pk = request.session['order_pk']
     order_payment = OrderPayment.objects.get(order_pk=order_pk)
     payment_id = request.data['object']['id']
     Payment.capture(payment_id)
     order = Order.objects.get(pk=order_pk)
     order_products = order.products.all()
     order_products.update(is_ordered=True)
     for product in order_products:
         product.save()
     order.is_ordered = True
     #order.payment = payment
     order.payment.charge_id = payment_id
     order.save()
     return Response(status=200)
Exemplo n.º 2
0
    def create_payment(self, data):
        """
        Создать платёж.
        """
        payment = Payment.create(data, self.generate_idempotence_key())

        # TODO: Сделать специальный класс для данной ошибки и описание.
        payment_status = payment.status
        if payment_status not in PaymentStatus.available_choices():
            raise YandexKassaException()

        # TODO: Сделать специальный класс для данной ошибки и описание.
        payment_payment_method = payment.payment_method.type
        if payment_payment_method not in PaymentMethod.available_choices():
            raise YandexKassaException()

        data = {
            'amount': payment.amount.value,
            'confirmation_url': payment.confirmation.confirmation_url,
            'created_at': dateparse.parse_datetime(payment.created_at),
            'currency': payment.amount.currency,
            'metadata': payment.metadata,
            'payment_id': payment.id,
            'payment_method': payment_payment_method,
            'status': payment_status,
        }

        if payment.description:
            data['description'] = payment.description

        return data
Exemplo n.º 3
0
    def get(self, request, value=3000, id=None):
        Configuration.account_id = '718911'
        Configuration.secret_key = 'test_LvcNnzMH8UOAI0Rc6Dw7MvP8O6WAZoQwsF0kW7e5tY4'

        print(id)
        nmb = int(value / 3000)

        currency = "RUB"

        return_url = "https://chestnokfest.live/tickets/payment_redirect/"

        description = str("Покупка " + str(nmb) + " билета(ов) за " +
                          str(value))

        payment = Payment.create({
            "amount": {
                "value": value,
                "currency": currency
            },
            "confirmation": {
                "type": "redirect",
                "return_url": return_url
            },
            "description": description,
            "metadata": {
                'id': id,
            }
        })

        return HttpResponseRedirect(payment.confirmation.confirmation_url)
Exemplo n.º 4
0
    def payment_status(self, payment_id):
        """
        Получить информацию о платеже.
        """
        payment = Payment.find_one(payment_id)

        created_at = (dateparse.parse_datetime(payment.created_at)
                      if payment.created_at else None)
        captured_at = (dateparse.parse_datetime(payment.captured_at)
                       if payment.captured_at else None)
        expires_at = (dateparse.parse_datetime(payment.expires_at)
                      if payment.expires_at else None)

        return {
            'amount': payment.amount.value,
            'captured_at': captured_at,
            'created_at': created_at,
            'currency': payment.amount.currency,
            'description': payment.description,
            'expires_at': expires_at,
            'metadata': payment.metadata,
            'payment_method': payment.payment_method.type,
            'receipt_registration': payment.receipt_registration,
            'status': payment.status,
        }
Exemplo n.º 5
0
    def post(self, request):
        print(request.data)
        pay_id = request.data.get('pay_id')
        Configuration.account_id = settings.YA_SHOP_ID
        Configuration.secret_key = settings.YA_API

        paymentObj = PaymentObj.objects.get(pay_code=pay_id)
        print(paymentObj)
        if not paymentObj.is_payed:
            payment = Payment.find_one(paymentObj.pay_id)
            print(payment)
            if payment.status == 'succeeded':
                paymentObj.is_payed = True
                paymentObj.status = 'Оплачен'
                paymentObj.save()
                paymentObj.user.balance += paymentObj.amount
                paymentObj.user.save(force_update=True)

            all_refferals = Refferal.objects.filter(refferal=paymentObj.user)

            print(all_refferals)
            if all_refferals.exists():
                for reffreal in all_refferals:
                    print(reffreal.master)
                    reffreal.master.partner_balance += int(paymentObj.amount *
                                                           10 / 100)
                    reffreal.master.save()
                    reffreal.earned += int(paymentObj.amount * 10 / 100)
                    reffreal.save()

        return Response(status=200)
Exemplo n.º 6
0
 def get(self, request):
     uuid = request.session.pop('payment') if 'payment' in request.session else None
     payment = None
     if uuid is not None:
         payment = models.Payment.objects.filter(uuid=uuid).first()
         if payment:
             payment_id = payment.yuid
             log = models.Logging.objects.create(
                 action="Запрос данных в Яндекс кассе для ReturnUrl после оплаты. api/views.PaymentReturnUrl.get()",
                 input_data=f"yuid: {payment_id}")
             try:
                 payment_info = Payment.find_one(payment_id)
             except Exception as err:
                 log.result = log.FAIL
                 log.output_data = f"{err}"
                 log.save()
             else:
                 if payment.status != payment_info.status:
                     payment.status_set(payment_info.status)
                     # models.Payment.objects.filter(pk=payment.pk).update(status=payment_info.status)
                     # payment.status = payment_info.status
                     # if payment_info.status == 'succeeded':
                     #     payment.date_approve = timezone.now()
                     # payment.save()
                 log.result = log.SUCCESS
                 try:
                     payment_info_dict = {key: value.__dict__ if isinstance(value, BaseObject) else value for key, value
                                     in payment_info.__dict__.items()}
                     log.output_data = f"{payment_info_dict}"
                 except:
                     log.output_data = f"{payment_info}"
                 log.save()
     form_html = get_template('includes/payment_info.html').render(context={'payment': payment}, request=request)
     context = self.make_context(content=form_html, title='Статус платежа')
     return render(request, 'general.html', context=context)
Exemplo n.º 7
0
async def buy_course(user_id, course_id, redirect_url):
    course = await CourseModel.get(course_id)
    if course.cost is None or course.cost <= 0:
        await PurchasedCoursesModel.create(
            course_id=course_id,
            user_id=user_id
        )
        return None
    payment = Payment.create({ 
        "amount": {
            "value": '{:.2f}'.format(course.cost),
            "currency": "RUB"
        },
        "confirmation": {
            "type": "redirect", 
            "return_url": redirect_url
        },
        "capture": True, 
        "description": "Покупка курса {name}".format(name=course.name)
    }, uuid.uuid4())

    await PaymentModel.create(
        user_id=user_id,
        course_id=course_id,
        order_id=payment.id
    )

    return payment.confirmation.confirmation_url
Exemplo n.º 8
0
 def createPayment(self,user,amount,booking=None,payment_type="account"):
     '''
         Create yandex kassa payment object. payment_type = True - autopayment otherwise is add card
     '''
     if self.getCurrentTransaction(user,amount,booking,payment_type) is not None:
         print("Yes getCurrentTransaction")
         return self.getCurrentTransaction(user,amount,booking,payment_type).getInfo()
     payment_info = {
         "amount": {
             "value": str(decimal.Decimal(amount)),
             "currency": "RUB"
         },
         "description": "Привязка карты"
     }
     payment_info.update(self.createReceipt(user,amount))
     if payment_type == "full":
         payment_info.update(self.createAutoPayment(user))
     else: #payment_type == "account": # False
         payment_info.update(self.createConfirmation())
     payment_object = Payment.create(payment_info)
     self.create(
         user = user,
         booking = booking,
         price = amount,
         date = now(),
         status = payment_object.status,
         payment_type = payment_type,
         payment_id = payment_object.id,
         created_at = payment_object.created_at,
         expires_at = payment_object.expires_at,
         checkouted = False
     )
     return payment_object
Exemplo n.º 9
0
    def pay_without_payment_id(self, order, value):
        return_url = f"{self.site_url}pay/{order.id}/"

        payment = Payment.create(
            {
                "amount": {
                    "value": value,
                    "currency": "RUB"
                },
                "capture": True,
                "payment_method_data": {
                    "type": "bank_card"
                },
                "confirmation": {
                    "type": "redirect",
                    "return_url": return_url
                },
                "description": f"Заказ {order.id}",
                "save_payment_method": True,
                "metadata": {
                    "order_id": order.id
                }
            }, str(uuid.uuid4()))

        return payment
Exemplo n.º 10
0
    def get(self, request):
        with open('/Users/blockbusted/PycharmProjects/config_shop_file.json') as config_file:
            config = json.load(config_file)
        Configuration.account_id = config['YANDEX_SHOP_ID']
        Configuration.secret_key = config['YANDEX_SECRET_KEY']

        order_pk = self.request.session['order_pk']
        order = Order.objects.get(pk=order_pk)
        amount = order.get_total_order_price()
        idempotence_key = str(uuid.uuid4())
        payment = Payment.create({
            #  "payment_token": idempotence_key,
            "amount": {
                "value": 1,
                "currency": "RUB"
            },
            "confirmation": {
                "type": "redirect",
                "return_url": "cart:payment-yandex-notifications"
            },
            "description": "Заказ №"+str(order_pk)
        })

        order_payment = OrderPayment()
        order_payment.order_pk = order_pk
        if self.request.user.is_authenticated:
            order_payment.user = self.request.user
        order_payment.amount = amount
        order_payment.save()
        return HttpResponseRedirect(payment.confirmation.confirmation_url)
Exemplo n.º 11
0
def pay(value, order_id, email, items, delivery):
    Configuration.account_id = settings.YA_ACCOUNT_ID
    Configuration.secret_key = settings.YA_SECRET_KEY

    payment_items = [
        {"description": f'{item.item.title} [{item.size.title}]', "quantity": "1",
         "amount": {"value": item.item.price, "currency": "RUB"},
         "vat_code": 1} for item in items]
    if delivery:
        payment_items += [{"description": "Доставка", "quantity": "1", "amount": {"value": delivery, "currency": "RUB"},
                           "vat_code": 1}]

    payment = Payment.create({
        "amount": {
            "value": value,
            "currency": "RUB"
        },
        "confirmation": {
            "type": "embedded",
            "return_url": "https://test.hrsmnt.ru/#/"
        },
        "receipt": {
            "customer": {
                "email": email,
            },
            "items": payment_items
        },
        "capture": True,
        "description": f"Заказ №{order_id}"
    }, uuid.uuid4())

    return payment.confirmation.confirmation_token, payment.id
Exemplo n.º 12
0
def payment_formation(order):
    Configuration.account_id = settings.YANDEX_SHOP_ID
    Configuration.secret_key = settings.YANDEX_SECRET_KEY
    independent_key = str(uuid.uuid4())
    payment = Payment.create(
        {
            "amount": {
                "value": order.amount,
                "currency": "RUB"
            },
            "confirmation": {
                "type": "redirect",
                "return_url": "https://expertsovet.com"
            },
            "receipt": {
                "email":
                order.email,
                "payment_subject":
                order.good.payment_subject,
                "payment_mode":
                order.good.payment_mode,
                "items": [{
                    "description": order.good.subtitle[:128],
                    "quantity": 1,
                    "amount": {
                        "value": order.amount,
                        "currency": "RUB"
                    },
                    "vat_code": "1",
                }]
            },
            "description": f"Заказ №{order.id}"
        }, independent_key)
    return payment
Exemplo n.º 13
0
def yandex_confirm(request):
    if request.method == 'POST':
        response_json = json.loads(request.body)
        data = response_json['object']
        if data['status'] == 'waiting_for_capture':
            payment_id = response_json['object']['id']
            data = Payment.capture(payment_id)
            # если платеж ожидает подтверждения, подтверждаю
            model = PaymentInfo()
        elif data['status'] == 'succeeded':
            model = PaymentInfo()
        else:
            pass
        try:
            model.payment_id = data['id']
            # id платежа из яндекс кассы
            model.phone = '+' + ''.join(re.findall(r'\d', data['description']))
            # привожу + 7 (900) 00-000-00 к +79000000000
            model.money = int(float(data['amount']['value']))
            # привожу строку 100.00 к цыфре 100
            model.paid = True
            model.save_with_bonus()
            mount = str(model.money + model.count_bonus(model.money))
            # Привожу сумму + бонус к строке для передачи в апи
            continue_play(model.phone, mount,
                          1)  # last argument it's time in hours
            status = 200
        except:
            status = 200
        return HttpResponse(status=status)
Exemplo n.º 14
0
    def post(self, request):
        Configuration.account_id = '718911'
        Configuration.secret_key = 'test_LvcNnzMH8UOAI0Rc6Dw7MvP8O6WAZoQwsF0kW7e5tY4'

        payment_id = request.data['object']['id']

        Payment.capture(payment_id)
        order_id = request.data['object']['metadata']['id']
        order = PaymentModel.objects.get(id=order_id)
        tickets = TicketPay.objects.all()
        send_email = False
        gen_codes = []

        render_tickets = []
        for ticket in tickets:
            if ticket.order == order:
                if not ticket.is_saved:
                    print(ticket.is_payed)
                    ticket.is_payed = True
                    ticket.is_saved = True
                    ticket.save()
                    send_email = True
                    email = ticket.email
                    gen_codes.append(ticket.generated_code)
                    render_tickets.append(ticket)
                    print(ticket.is_payed)
        if send_email:
            gen_codes = ' '.join(gen_codes)
            print(gen_codes)
            print(email)

            context = {
                'tickets': render_tickets,
            }
            # print(context['tickets'][0])
            send_mail('Ваш заказ с билетом(ами)',
                      gen_codes,
                      '*****@*****.**', [email],
                      html_message=get_template('Payment/letter.html').render(
                          context))
            # send_mail('Ваш заказ с билетом(ами)', gen_codes, '*****@*****.**', [email])

        # нужно забрать айдишники, за которые заплачено и привязать тут полю is_payed значение True
        # после отправить на мыло ключ с инфой
        # otpravka email s klyu4om

        return Response(status=200)
Exemplo n.º 15
0
    def post(self, request):
        """
        Подтверждение платежа и смена статуса заказа
        :param request:
        :return:
        """
        order_id = request.GET.get("order_id", "")
        order = Orders.objects.get(id=order_id)
        payment_id = order.payment_id
        # payment_id = '26fd1b35-000f-5000-a000-14c3cdc3d6c1'
        Payment.capture(payment_id)

        order = Orders.objects.get(id=order_id)
        order.status_order = 3
        order.save()

        return Response(status=200)
Exemplo n.º 16
0
 def post(self, *args, **kwargs):
     Configuration.account_id = settings.YANDEX_ACCOUNT_ID
     Configuration.secret_key = settings.YANDEX_SECRET_KEY
     user = self.request.user
     try:
         game = Game.objects.get(pk=kwargs.get('pk'))
     except Game.DoesNotExist:
         return Response({
             'error': 'Game does not exist!',
         },
                         status=status.HTTP_400_BAD_REQUEST)
     user_registered_places = UserInTeam.objects.filter(game=game.pk,
                                                        user=user.pk)
     if user_registered_places.count() == 0:
         return Response(
             {
                 'error': 'User has no purchased seats for this game!',
             },
             status=status.HTTP_400_BAD_REQUEST)
     user_game_payments = GamePayment.objects.filter(user=user.pk,
                                                     game=game.pk,
                                                     status='SUCCEEDED')
     if user_game_payments.count() == 0:
         return Response(
             {
                 'error': 'User has no successful payments for this game!',
             },
             status=status.HTTP_400_BAD_REQUEST)
     refunds = []
     non_refundable_payments = []
     unregistered_places_count = 0
     for game_payment in user_game_payments:
         payment = Payment.find_one(game_payment.identifier)
         if payment.status == 'succeeded':
             game_payment_refund = create_refund(game_payment, user, game)
             refunds.append(game_payment_refund)
             if game_payment_refund.status == 'SUCCEEDED':
                 del_objects = UserInTeam.objects.filter(
                     game=game.pk, user=user.pk)[:game_payment.places_count]
                 for del_object in del_objects:
                     del_object.delete()
                     unregistered_places_count += game_payment.places_count
         else:
             non_refundable_payments.append(game_payment)
     if len(refunds):
         create_timeline_block('GAME_MESSAGE',
                               settings.USER_CANCEL_REGISTRATION, user,
                               'APP', game)
     return Response(
         {
             'refunds':
             GamePaymentRefundSerializer(refunds, many=True).data,
             'non_refundable_payments':
             GamePaymentSerializer(non_refundable_payments, many=True).data,
             'unregistered_places_count':
             unregistered_places_count,
         },
         status=status.HTTP_200_OK)
Exemplo n.º 17
0
 def capture(self):
     return Payment.capture(
         self.payment_id,
         {"amount": {
             "value": self.price,
             "currency": "RUB"
         }},
         str(uuid.uuid4())  #idempotence key
     )
Exemplo n.º 18
0
    def pay_with_payment_id(self, order, value):
        payment = Payment.create(
            {
                "amount": {
                    "value": value,
                    "currency": "RUB"
                },
                "description": f"Заказ {order.id}",
                "payment_method_id": self.payment_id
            }, str(uuid.uuid4()))

        return payment
Exemplo n.º 19
0
    def check_pay(self, payment_id):
        paid = False
        time_while_end = datetime.now() + timedelta(seconds=33)
        while paid == False and datetime.now(tz=None) <= time_while_end:
            payment_result = Payment.find_one(payment_id)
            paid = payment_result.paid
            time.sleep(3)

        if paid:
            paid = payment_result

        return paid
Exemplo n.º 20
0
def do_payment(track_code):
    ad = Ads.query.filter_by(track=track_code).first()
    form = ProcessPayment()

    if current_user.is_authenticated:
        user = Users.query.get(current_user.id)

        if ad in user.ads.all():
            is_own = True
        else:
            is_own = False
    else:
        is_own = False

    if form.validate_on_submit() and form.submit.data:

        Configuration.account_id = Variables.query.get(3).value
        Configuration.secret_key = Variables.query.get(4).value

        print(form.waste.data)

        payment = Payment.create(
            {
                "amount": {
                    "value":
                    int(ad.price) - int(current_user.collected_m)
                    if form.waste.data else ad.price,
                    "currency":
                    "RUB"
                },
                "confirmation": {
                    "type": "redirect",
                    "return_url": "https://vk.com/id608742663"
                },
                "capture": True,
                "description": "Оплата объявления {}".format(ad.track),
                "metadata": {
                    "track": ad.track,
                    "bonus_used": 1 if form.waste.data else 0,
                    "payer": current_user.id if is_own else 'unregistered user'
                }
            }, uuid.uuid4())

        print('передано в оплату')
        return redirect(payment.confirmation.confirmation_url)
    return render_template('do_payment.html',
                           form=form,
                           ad=ad,
                           is_own=is_own,
                           current_user=current_user,
                           price_btn_text='Оплатить {}₽'.format(ad.price))
Exemplo n.º 21
0
    def handle_payment(self, order_number, total, **kwargs):
        """
        Called from submit method
        Handle any payment processing and record payment sources and events.

        This method is designed to be overridden within your project.

        This method is responsible for handling payment and recording the
        payment sources (using the add_payment_source method) and payment
        events (using add_payment_event) so they can be
        linked to the order when it is saved later on.
        """
        method = self.checkout_session.payment_method()
        if method == 'cod':
            source_type, is_created = models.SourceType.objects.get_or_create(
                name='cash')
            redirect_url = ''
        elif method == 'yandex_kassa':
            Configuration.account_id = settings.KASSA_ID
            Configuration.secret_key = settings.KASSA_TOKEN
            source_type, is_created = models.SourceType.objects.get_or_create(
                name='online')
            payment = Payment.create(
                {
                    "amount": {
                        "value": str(total.incl_tax),
                        "currency": "RUB"
                    },
                    "confirmation": {
                        "type": "redirect",
                        "return_url":
                        "http://127.0.0.1:8000/checkout/thank-you/"
                    },
                    "capture": True,  # холдирование - False
                    "description": order_number
                },
                uuid.uuid4())
            redirect_url = payment.confirmation.confirmation_url

        source = source_type.sources.model(source_type=source_type,
                                           amount_allocated=total.incl_tax,
                                           currency=total.currency)
        self.add_payment_source(source)
        self.add_payment_event('Authorised', total.incl_tax)
        if redirect_url:
            # return redirect(redirect_url)
            raise RedirectRequired(redirect_url)
Exemplo n.º 22
0
def pay(request, timeslot_id):
    amount = 3400
    timeslot = TimeSlot.objects.get(pk=timeslot_id)
    user = create_user(request)
    enroll = Enroll.objects.create(timeslot_id=timeslot_id, user=user, )
    enroll.save()
    payment = Payment.objects.create(enroll=enroll, status="initial", amount=amount, )
    payment.save()
    yandex_payment = YandexPayment.create({
        "amount": {
            "value": amount,
            "currency": "RUB"
        },
        "payment_method_data": {
            "type": "bank_card"
        },
        "confirmation": {
            "type": "redirect",
            "return_url": settings.KASSA_REDIRECT_URL
        },
        "capture": False,
        "description": "Консультация " + timeslot.specialist.middle_name + " " + timeslot.specialist.first_name,
        "receipt": {
            "items": [{
                "description": "Консультация " + timeslot.specialist.middle_name + " " + timeslot.specialist.first_name,
                "quantity": 1,
                "amount": {
                    "value": amount,
                    "currency": "RUB"
                },
                "vat_code": 1,
                "payment_subject": "service",
                "payment_mode": "full_prepayment"

            }],
            "tax_system_code": 3,
            "email": user.email,

        }
    }, uuid.uuid4())

    payment_id = yandex_payment.id
    payment.yandex_payment = payment_id
    payment.save()

    print(yandex_payment)
    return HttpResponseRedirect(yandex_payment.confirmation.confirmation_url)
Exemplo n.º 23
0
def pay_notification(request):
    payment_id = request.data['object']['id']
    yandex_payment = YandexPayment.capture(payment_id)
    payment = Payment.objects.get(yandex_payment=payment_id)
    if payment:
        payment.status = yandex_payment.status
        payment.save()
        print(yandex_payment.id)
        print(yandex_payment.status)
        user = payment.enroll.user

        if not payment.notify:
            payment.notify = True
            payment.save()
            pay_user_email_notify(payment)
            pay_specialist_email_notify(payment)

    return Response(status=200)
Exemplo n.º 24
0
def paycheck(request, payment_id):
    order = get_object_or_404(UserAccount, key=payment_id)
    payment = Payment.find_one(order.payment_id)
    if payment.status == "succeeded":
        order.status = True
        order.save()
        try:
            send_mail(
                'Алгоритм языка | Оплата занятий',
                'Вы успешно оплатили заказ № {0} на сумму: {1}'.format(
                    order.pk, str(decimal.Decimal(order.price))),
                '*****@*****.**',
                ['{0}'.format(order.email)],
                fail_silently=False,
            )
        except Exception as e:
            print("Email sendr exception {0}".format(e))
    return render(request, "sprache/success.html", {"number": order.pk})
Exemplo n.º 25
0
 def createPaymentObject(self, capture=False, save_payment_method=True):
     '''
         Returns Yandex Kassa Object if rentor i.e user and price are set.
     '''
     if self.rentor is None:
         return None
     if self.price is None:
         return None
     return Payment.create({
         "amount": {
             "value": "{0}".format(str(decimal.Decimal(self.price))),
             "currency": "RUB"
         },
         "confirmation": {
             "type": "embedded"
         },
         "receipt": {
             "customer": {
                 "full_name":
                 "{0} {1}".format(self.rentor.first_name,
                                  self.rentor.last_name),
                 "email":
                 "{0}".format(self.rentor.email)
             },
             "items": [{
                 "description": "Оплата аренды",
                 "quantity": "2.00",
                 "amount": {
                     "value":
                     "{0}".format(str(decimal.Decimal(self.price))),
                     "currency": "RUB"
                 },
                 "vat_code": "2",
                 "payment_mode": "full_prepayment",
                 "payment_subject": "commodity"
             }]
         },
         "capture":
         capture,
         "save_payment_method":
         save_payment_method,
         "description":
         "Оплата аренды №{0}".format(self.pk)
     })
Exemplo n.º 26
0
def refresh_payment(payment):
    Configuration.configure(settings.YANDEX_CHECKOUT_CLIENT_ID,
                            settings.YANDEX_CHECKOUT_SECRET_KEY)
    yandex_payment = YandexPayment.find_one(payment.yandex_id)

    need_to_set_payed = False
    if payment.status == Payment.PENDING and yandex_payment.status in (
            Payment.WAITING_FOR_CAPTURE, Payment.SUCCEEDED):
        need_to_set_payed = True

    payment.status = yandex_payment.status
    if yandex_payment.cancellation_details:
        payment.cancellation_reason = yandex_payment.cancellation_details.reason
    payment.save(update_fields=['status', 'cancellation_reason'])

    if need_to_set_payed:
        set_order_payed(payment.order)

    return payment
Exemplo n.º 27
0
def create_payment(price, days):
    payment = Payment.create({
        "amount": {
            "value": f"{price}",
            "currency": "RUB"
        },
        "confirmation": {
            "type": "redirect",
            "return_url": "http://localhost:3000/pay_success"
        },
        "capture": True,
        "description": "Заказ №1",
        'metadata': {
            'days': days
        }
    })
    p_id = payment.id
    print(p_id)
    return payment.confirmation.confirmation_url, p_id
Exemplo n.º 28
0
def index_page(request):
    if request.method == 'POST':
        form = PaymentInfoForm(request.POST)
        if form.is_valid():

            payment = Payment.create(
                {
                    "amount": {
                        "value": form.cleaned_data['money'],
                        "currency": "RUB"
                    },
                    "confirmation": {
                        "type": "redirect",
                        "return_url": settings.ALLOWED_HOSTS[0]
                    },
                    "receipt": {
                        "customer": {
                            "full_name":
                            "ФИО",
                            "phone":
                            ''.join(
                                re.findall(r'\d', form.cleaned_data['phone']))
                        },
                        "items": [{
                            "description": "Оплата бронирования",
                            "quantity": "1.00",
                            "amount": {
                                "value": form.cleaned_data['money'],
                                "currency": "RUB"
                            },
                            "vat_code": "2",
                            "payment_mode": "full_prepayment",
                            "payment_subject": "commodity"
                        }]
                    },
                    "capture": True,
                    "description": form.cleaned_data['phone']
                }, uuid.uuid4())
            return HttpResponseRedirect(payment.confirmation.confirmation_url)
    else:
        form = PaymentInfoForm()
    return render(request, 'index.html', {'form': form})
Exemplo n.º 29
0
 def create_yandex_payment(self, user):
     payment_data = {
         'amount': {'value': self.cost, 'currency': 'RUB'},
         'confirmation': {'type': 'redirect', 'return_url': 'https://sample-shop.com/'},
         'capture': True,
         'description': self.__str__(),
         'receipt': {
             'customer': {'email': user.email},
             'items': [
                 {
                     'description': item.name,
                     'quantity': item.count,
                     'amount': {'value': item.price, 'currency': 'RUB'},
                     'vat_code': 1,
                 }
                 for item in self.order.items.all()
             ],
         },
     }
     return YandexPayment.create(payment_data, self.inner_key)
Exemplo n.º 30
0
def check_payment_status():
    """
    периодическая проверка неконечных статусов платежа, с момента создания которых прошел час
    (в течении часа пользователю доступен виджет оплаты в статусе -pending-)
    """
    payments = models.Payment.objects.filter(
        account__isnull=False,
        yuid__isnull=False).exclude(status__in=['succeeded', 'canceled'])
    if payments:
        try:
            upper_settings = models.UpperSetting.objects.get()
            test = upper_settings.test_mode
            if test:
                yandex_api_key = upper_settings.yandex_api_key_test
                shopid = upper_settings.shopid_test
            else:
                yandex_api_key = upper_settings.yandex_api_key
                shopid = upper_settings.shopid
        except:
            base_dir = settings.BASE_DIR

            env = environ.Env()
            env.read_env(path.join(base_dir, '.env'))
            yandex_api_key = env('YANDEX_API_KEY')
            shopid = env('SHOPID')
        Configuration.account_id = shopid
        Configuration.secret_key = yandex_api_key
        for payment in payments:
            try:
                payment_info = Payment.find_one(payment.yuid)
                if payment.status != payment_info.status:
                    payment.status_set(payment_info.status)
                    # models.Payment.objects.filter(pk=payment.pk).update(status=payment_info.status)
                    # payment.status = payment_info.status
                    # if payment_info.status == 'succeeded':
                    #     payment.date_approve = timezone.now()
                    # payment.save()
            except Exception as ex:
                print(ex)