diff --git a/finance/management/commands/yandex_repeat_payment.py b/finance/management/commands/yandex_repeat_payment.py index 0638351..bba2624 100644 --- a/finance/management/commands/yandex_repeat_payment.py +++ b/finance/management/commands/yandex_repeat_payment.py @@ -1,14 +1,8 @@ import logging -import os -import requests -from dateutil.relativedelta import relativedelta -from django.conf import settings from django.core.management.base import BaseCommand -from django.utils import timezone -from yandex_money.models import Payment -from finance.models import InvoiceRebilling +from finance.tasks import periodic_billing logger_yandex = logging.getLogger('yandex_money') @@ -18,31 +12,4 @@ class Command(BaseCommand): def handle(self, *args, **options): logger_yandex.info("start console repeat payment command") 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) + periodic_billing() diff --git a/finance/tasks.py b/finance/tasks.py index 7dca103..33a0615 100644 --- a/finance/tasks.py +++ b/finance/tasks.py @@ -21,6 +21,7 @@ def periodic_billing(): for invoice in invoices.filter( expected_date__gt=timezone.now(), expected_date__lt=timezone.now() + relativedelta(days=1)): + # TODO выбирать все, даже прошлые неотработанные - что бы не потерять user = invoice.bill.user yandex_pay = Payment.objects.create( @@ -39,6 +40,7 @@ def periodic_billing(): logger_yandex.error('periodic billing Exception', exc_info=True, extra={ 'exc': exc }) + # TODO записывать в invoice.comments ошибку яндекса def repeat_card_payment(invoice): @@ -55,5 +57,5 @@ def repeat_card_payment(invoice): ), verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer')) logger_yandex.info('periodic billing finish', exc_info=True, extra={ - 'response': resp.text + 'response': resp.text, 'code': resp.status_code, }) diff --git a/finance/views.py b/finance/views.py index ebd8976..a79b009 100644 --- a/finance/views.py +++ b/finance/views.py @@ -473,11 +473,11 @@ class YandexAvisoView(APIView): # invoice = pay.invoice # invoice.key = data['invoiceId'] # invoice.save() - InvoiceRebilling.objects.filter(bill=pay.invoice.bill).update(key=data['invoiceId']) pay.status = Payment.STATUS.SUCCESS now = timezone.now() pay.performed_datetime = now.isoformat() pay.save() + InvoiceRebilling.objects.filter(bill=pay.invoice.bill).update(key=data['invoiceId']) xml_res = """ """ % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id))