From 2f4c1c8c723feac91afbbf2806277507676b4d81 Mon Sep 17 00:00:00 2001 From: wad Date: Thu, 19 Apr 2018 15:43:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=81=D1=8C=20=D0=BA=D0=BE=D0=B4=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BE=D0=B4=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6=D0=B0=20?= =?UTF-8?q?=D0=B2=20try/except=20+=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B5=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- finance/management/__init__.py | 0 .../commands/yandex_repeat_payment.py | 44 ++++++++++++ finance/tasks.py | 72 +++++++++---------- 3 files changed, 79 insertions(+), 37 deletions(-) create mode 100644 finance/management/__init__.py create mode 100644 finance/management/commands/yandex_repeat_payment.py diff --git a/finance/management/__init__.py b/finance/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/finance/management/commands/yandex_repeat_payment.py b/finance/management/commands/yandex_repeat_payment.py new file mode 100644 index 0000000..b2f55a9 --- /dev/null +++ b/finance/management/commands/yandex_repeat_payment.py @@ -0,0 +1,44 @@ +from django.core.management.base import BaseCommand + +import os +import requests +from dateutil.relativedelta import relativedelta +from yandex_money.models import Payment + +from finance.models import InvoiceRebilling +from django.conf import settings +from django.utils import timezone + + +class Command(BaseCommand): + + def handle(self, *args, **options): + print('Started') + invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F') + for invoice in invoices.filter( + expected_date__gt=timezone.now(), expected_date__lt=timezone.now() + relativedelta(days=1)): + print('invoice', invoice) + user = invoice.bill.user + yandex_pay = Payment.objects.create( + order_amount=invoice.price, + customer_number=user.id, + user=user, + cps_email=user.email + ) + invoice.yandex_pay = yandex_pay + invoice.save() + resp = requests.post( + settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment', + data={ + 'clientOrderId': invoice.id, # уникальное возрастающее целое число + 'invoiceId': invoice.key, + 'amount': invoice.price, + 'orderNumber': invoice.yandex_pay.order_number + }, + cert=( + os.path.join(settings.SSL_ROOT, 'skillbox.cer'), + os.path.join(settings.SSL_ROOT, 'skillbox.key') + ), + verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer') + ) + print(resp) diff --git a/finance/tasks.py b/finance/tasks.py index 4b92435..b51dcf5 100644 --- a/finance/tasks.py +++ b/finance/tasks.py @@ -15,45 +15,43 @@ logger_yandex = logging.getLogger('yandex_money') @celery_app.task def periodic_billing(): - logger_yandex.info("start periodic billing task") - - invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F') - - for invoice in invoices.filter( - expected_date__gt=timezone.now(), expected_date__lt=timezone.now() + relativedelta(days=1)): - - user = invoice.bill.user - yandex_pay = Payment.objects.create( - order_amount=invoice.price, - customer_number=user.id, - user=user, - cps_email=user.email - ) - invoice.yandex_pay = yandex_pay - invoice.save() - - repeat_card_payment(invoice) - - -def repeat_card_payment(invoice): try: - resp = requests.post(settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment', - data={ - 'clientOrderId': invoice.id, # уникальное возрастающее целое число - 'invoiceId': invoice.key, - 'amount': invoice.price, - 'orderNumber': invoice.yandex_pay.order_number - }, - cert=( - os.path.join(settings.SSL_ROOT, 'skillbox.cer'), - os.path.join(settings.SSL_ROOT, 'skillbox.key') - ), - verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer')) + logger_yandex.info("start periodic billing task") + invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F') + + for invoice in invoices.filter( + expected_date__gt=timezone.now(), expected_date__lt=timezone.now() + relativedelta(days=1)): + + user = invoice.bill.user + yandex_pay = Payment.objects.create( + order_amount=invoice.price, + customer_number=user.id, + user=user, + cps_email=user.email + ) + invoice.yandex_pay = yandex_pay + invoice.save() + + repeat_card_payment(invoice) except Exception as exc: logger_yandex.error('periodic billing Exception', exc_info=True, extra={ 'exc': exc }) - else: - logger_yandex.info('periodic billing finish', exc_info=True, extra={ - 'response': resp.text - }) + + +def repeat_card_payment(invoice): + resp = requests.post(settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment', + data={ + 'clientOrderId': invoice.id, # уникальное возрастающее целое число + 'invoiceId': invoice.key, + 'amount': invoice.price, + 'orderNumber': invoice.yandex_pay.order_number + }, + cert=( + os.path.join(settings.SSL_ROOT, 'skillbox.cer'), + os.path.join(settings.SSL_ROOT, 'skillbox.key') + ), + verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer')) + logger_yandex.info('periodic billing finish', exc_info=True, extra={ + 'response': resp.text + })