Merge branch 'dev' into 'master'

Dev

See merge request !427
master
Вадим Шандринов 8 years ago
commit c27e7462b4
  1. 31
      config_app/management/commands/for_test.py
  2. 35
      finance/tasks.py
  3. 4
      finance/views.py

@ -5,12 +5,27 @@ class Command(BaseCommand):
help = 'Команда для тестов'
def handle(self, *args, **options):
from finance.loggers import FinanceLogger
logger = FinanceLogger()
try:
10 / 0
except Exception as exc:
logger.exception('FinanceLogger test log record', extra={'asdf': 3246523},
invoice_id=42, some_param={'a': 1, 'b': 3, 'привет': 'медвед'}
)
from xml.dom import minidom
xx = """<?xml version="1.0" encoding="UTF-8"?>
<repeatCardPaymentResponse status="3" error="112" processedDT="2018-04-23T19:37:04.544+03:00" techMessage="Неверное значение параметра invoiceId" clientOrderId="unknown"/>"""
dom = minidom.parseString(xx)
dom.normalize()
node1 = dom.getElementsByTagName("repeatCardPaymentResponse")[0]
print(node1)
print(node1.getAttribute('error'))
print(node1.getAttribute('processedDT'))
print(node1.getAttribute('techMessage'))
# def handle(self, *args, **options):
# from finance.loggers import FinanceLogger
# logger = FinanceLogger()
# try:
# 10 / 0
# except Exception as exc:
# logger.exception('FinanceLogger test log record', extra={'asdf': 3246523},
# invoice_id=42, some_param={'a': 1, 'b': 3, 'привет': 'медвед'}
# )
#

@ -8,23 +8,26 @@ from django.utils import timezone
from yandex_money.models import Payment
from finance.loggers import FinanceLogger
from finance.models import InvoiceRebilling
from finance.models import InvoiceRebilling, Invoice
from lms import celery_app
finance_logger = FinanceLogger()
@celery_app.task
def periodic_billing():
finance_logger.info("start periodic billing task")
invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F')
# TODO заюзать Invoice.BILL_STATUSES
invoices = InvoiceRebilling.objects.filter(method='Y', status='W')
# TODO тут был exclude('F') то есть все неоплаченные... но это не верно!
for invoice in invoices.filter(expected_date__lt=timezone.now()):
# выбираем все необработанные из прошлого
with transaction.atomic():
try:
_yandex_repeat_card_payment(invoice)
except Exception as exc:
finance_logger.exception('YandexMoney repeatCardPayment Exception', invoice_id=invoice.id)
invoice.comment = 'Ошибка при попытке повторного платежа, свяжитесь с клиентской службой'
finance_logger.exception('Yandex Money repeatCardPayment Exception', invoice_id=invoice.id)
invoice.comment += 'Yandex Money: Ошибка при попытке повторного платежа, свяжитесь с клиентской службой'
invoice.save()
@ -55,6 +58,24 @@ def _yandex_repeat_card_payment(invoice):
),
verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer')
)
# TODO тут проверять нет ли ошибки яндекса (даже при 200 ответе)
finance_logger.info('YandexMoney repeatCardPayment ended',
invoice_id=invoice.id, response=resp.text, code=resp.status_code, )
resp_text = resp.text
finance_logger.info('YandexMoney repeatCardPayment response',
invoice_id=invoice.id, response=resp_text, code=resp.status_code, )
try:
_check_yandex_response_status(invoice, resp_text)
except Exception as exc:
finance_logger.exception("Can't parse yandex response", invoice_id=invoice.id, response=resp_text)
def _check_yandex_response_status(invoice, resp_text):
from xml.dom import minidom
dom = minidom.parseString(resp_text)
dom.normalize()
resp_node = dom.getElementsByTagName("repeatCardPaymentResponse")[0]
status = resp_node.getAttribute('status')
if status != '0':
error = resp_node.getAttribute('error')
processed_dt = resp_node.getAttribute('processedDT')
tech_message = resp_node.getAttribute('techMessage')
invoice.status += Invoice.BILL_STATUSES[-1][0]
invoice.comment += 'Yandex Money: ошибка № {}, сообщение {} от {}'.format(error, tech_message, processed_dt)

@ -448,6 +448,8 @@ class YandexAvisoView(APIView):
val = i.split('=')[1]
data[key] = val
finance_logger.info('Подтверждение платежа запрос', request=data)
order_number = data['orderNumber']
try:
pay = Payment.objects.get(order_number=order_number)
@ -456,8 +458,6 @@ class YandexAvisoView(APIView):
request="Payment with invoice_id=%s not found" % order_number)
return Response(status=204)
finance_logger.info('Подтверждение платежа запрос', request=data)
pay.shop_amount = data['shopSumAmount']
pay.status = Payment.STATUS.SUCCESS
now = timezone.now()

Loading…
Cancel
Save