Опс!
+Ошибка при оплате!
+diff --git a/src/customer/admin.py b/src/customer/admin.py index d717df1..f00caf0 100644 --- a/src/customer/admin.py +++ b/src/customer/admin.py @@ -104,7 +104,25 @@ class ClientAdmin(admin.ModelAdmin): @admin.register(models.Payment) class PaymentAdmin(admin.ModelAdmin): - pass + list_display = ( + 'admin_pk', + 'admin_user', + 'order_amount', + 'order_number', + 'status' + ) + + def admin_pk(self, obj): + return obj.pk + + admin_pk.short_description = 'Ключ' + admin_pk.admin_order_field = 'pk' + + def admin_user(self, obj): + return obj.user.email + + admin_user.short_description = 'Email' + admin_user.admin_order_field = 'user__email' admin.site.register(models.UserProfile, UserProfileAdmin) diff --git a/src/customer/models.py b/src/customer/models.py index 9c7e057..7558a69 100644 --- a/src/customer/models.py +++ b/src/customer/models.py @@ -6,6 +6,7 @@ import logging from datetime import datetime, timedelta from PIL import Image +from django.dispatch import receiver from pytils import numeral from dateutil.relativedelta import relativedelta @@ -19,7 +20,7 @@ from django.conf import settings from customer import consts, managers, utils from myauth.models import DokUser from commons.utils import only_numerics -from robokassa.signals import result_received +from robokassa.signals import result_received, success_page_visited log = logging.getLogger(__name__) @@ -751,12 +752,47 @@ class Payment(models.Model): verbose_name_plural = 'Платежи' def __str__(self): - return f'{self.user}-{self.order_number}' + return f'{self.user}-{self.order_number}-{self.get_status_display()}' -def payment_received(sender, **kwargs): - print(kwargs) +@receiver(result_received) +def order_completed(sender, **kwargs): + try: + payment = Payment.objects.get( + pk=kwargs['InvId'], + order_amount=kwargs['OutSum'] + ) + payment.status = Payment.SUCCESS + payment.save() + + lic = License.objects.get(pk=payment.order_number) + lic.status = consts.STATUS_PAID + lic.paid_date = datetime.now().date() + lic.save() + except Payment.DoesNotExist: + log.info(f"payment with id={kwargs['InvId']} not found") + except License.DoesNotExist: + log.info(f"payment with id={kwargs['InvId']} not found") -result_received.connect(payment_received) +@receiver(success_page_visited) +def success_page_visited_completed(sender, **kwargs): + if settings.DEBUG: + try: + payment = Payment.objects.get( + pk=kwargs['InvId'], + order_amount=kwargs['OutSum'] + ) + payment.status = Payment.SUCCESS + payment.save() + + lic = License.objects.get(pk=payment.order_number) + lic.status = consts.STATUS_PAID + lic.paid_date = datetime.now().date() + lic.save() + + except Payment.DoesNotExist: + log.info(f"payment with id={kwargs['InvId']} not found") + except License.DoesNotExist: + log.info(f"payment with id={kwargs['InvId']} not found") diff --git a/src/customer/views/license.py b/src/customer/views/license.py index 2e9889a..2f950e0 100644 --- a/src/customer/views/license.py +++ b/src/customer/views/license.py @@ -46,8 +46,7 @@ def order_license(request): payment = Payment.objects.create( order_amount=form.cleaned_data['term'].price, order_number=new_license.id, - user=request.user - ) + user=request.user) return redirect(reverse('payment_robokassa', kwargs={'payment_id': payment.id})) return redirect(reverse('customer-orders')) @@ -179,12 +178,6 @@ def orders_list(request): def pay_with_robokassa(request, payment_id): payment = get_object_or_404(Payment, pk=payment_id) - # https://auth.robokassa.ru/Merchant/Index.aspx?isTest=1&MerchantLogin=Dokumentor&InvId=231849535&OutSum=100.00&SignatureValue=5c330dbb455ab540fb5fb4ee6b476f3a&Culture=ru - # http://127.0.0.1:8000/robokassa/success/?inv_id=3&InvId=3&out_summ=200.00&OutSum=200.00&crc=2c5050aaff3788c19cbd50ac6974f650&SignatureValue=2c5050aaff3788c19cbd50ac6974f650&Culture=ru&IsTest=1 - # http://127.0.0.1:8000/robokassa/success/?inv_id=5&InvId=5&out_summ=3000.00&OutSum=3000.00&crc=3e9ae74938ad9397053bf184732e8bfa&SignatureValue=3e9ae74938ad9397053bf184732e8bfa&Culture=ru&IsTest=1 - # 29CE5970A619428DE1E800A49E68E13B - # 3e9ae74938ad9397053bf184732e8bfa - form = RobokassaForm(initial={ 'OutSum': payment.order_amount, 'InvId': payment.id, diff --git a/src/dokumentor/settings/common.py b/src/dokumentor/settings/common.py index 4cb5b20..20080d9 100644 --- a/src/dokumentor/settings/common.py +++ b/src/dokumentor/settings/common.py @@ -320,20 +320,6 @@ OWNER = { 'SIGN_GB': os.path.join(ROOT_DIR, 'extra', 'gb_sign.png') } -# ROBOKASSA_PASSWORD1 = 'O9ohc2uT8T9s1fKwXbuq' -# ROBOKASSA_PASSWORD2 = 'D552KBeAJhhVOfKEqT62' - - -# Robokassa -ROBOKASSA_LOGIN = 'Dokumentor' -# Test -ROBOKASSA_PASSWORD1 = 'ZtcV4jzgJ5qI2Cx7Rc4a' -ROBOKASSA_PASSWORD2 = 'iuJI7adaUGGE96QKz17a' - -ROBOKASSA_USE_POST = False -ROBOKASSA_STRICT_CHECK = True -ROBOKASSA_TEST_MODE = True - LOGGING = { 'version': 1, 'disable_existing_loggers': True, diff --git a/src/dokumentor/settings/local.py b/src/dokumentor/settings/local.py index 20bd0c6..78d865a 100644 --- a/src/dokumentor/settings/local.py +++ b/src/dokumentor/settings/local.py @@ -27,3 +27,13 @@ DATABASES = { EMAIL_BACKEND = 'eml_email_backend.EmailBackend' EMAIL_FILE_PATH = os.path.join(ROOT_DIR, 'tmp_emails') + +# Robokassa +ROBOKASSA_LOGIN = 'Dokumentor' +# Test +ROBOKASSA_PASSWORD1 = 'ZtcV4jzgJ5qI2Cx7Rc4a' +ROBOKASSA_PASSWORD2 = 'iuJI7adaUGGE96QKz17a' + +ROBOKASSA_USE_POST = True +ROBOKASSA_STRICT_CHECK = False +ROBOKASSA_TEST_MODE = True diff --git a/src/dokumentor/settings/production.py b/src/dokumentor/settings/production.py index 12e2210..0c69f8d 100644 --- a/src/dokumentor/settings/production.py +++ b/src/dokumentor/settings/production.py @@ -35,3 +35,14 @@ EMAIL_HOST_PASSWORD = e.get('DJANGO_EMAIL_PASSWORD') EMAIL_USE_TLS = e.get('DJANGO_EMAIL_USE_TLS') EMAIL_USE_SSL = e.get('DJANGO_EMAIL_USE_SSL') EMAIL_SUBJECT_PREFIX = 'dokumentor ' + + +# Robokassa +ROBOKASSA_LOGIN = 'Dokumentor' + +ROBOKASSA_PASSWORD1 = 'O9ohc2uT8T9s1fKwXbuq' +ROBOKASSA_PASSWORD2 = 'D552KBeAJhhVOfKEqT62' + +ROBOKASSA_USE_POST = True +ROBOKASSA_STRICT_CHECK = True +ROBOKASSA_TEST_MODE = False diff --git a/src/dokumentor/settings/stage.py b/src/dokumentor/settings/stage.py index a8c75f0..8b8e6d0 100644 --- a/src/dokumentor/settings/stage.py +++ b/src/dokumentor/settings/stage.py @@ -59,3 +59,13 @@ CALLBACK_SETTINGS = { 'MANAGERS_EMAILS': ('mitri4@bk.ru', 'alexander.time@gmail.com', 'dmitriy.shesterkin@gmail.com'), 'NEW_REQ_AVAIL_EMAIL_SUBJ': u'Вопрос техподдержке', } + +# Robokassa +ROBOKASSA_LOGIN = 'Dokumentor' +# Test +ROBOKASSA_PASSWORD1 = 'ZtcV4jzgJ5qI2Cx7Rc4a' +ROBOKASSA_PASSWORD2 = 'iuJI7adaUGGE96QKz17a' + +ROBOKASSA_USE_POST = True +ROBOKASSA_STRICT_CHECK = True +ROBOKASSA_TEST_MODE = True diff --git a/src/robokassa/views.py b/src/robokassa/views.py index 1868755..b07dcf8 100644 --- a/src/robokassa/views.py +++ b/src/robokassa/views.py @@ -19,12 +19,11 @@ def receive_result(request, **credentials): """ data = request.POST if USE_POST else request.GET form = ResultURLForm(data, **credentials) - print(form.is_valid()) + if form.is_valid(): inv_id = form.cleaned_data['InvId'] out_sum = form.cleaned_data['OutSum'] - print('----------------------------------------------------') - print(form.cleaned_data['InvId'], form.cleaned_data['OutSum']) + # сохраняем данные об успешном уведомлении в базе, чтобы # можно было выполнить дополнительную проверку на странице успешного # заказа diff --git a/static/css/style.css b/static/css/style.css index 80e4a59..abb2865 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1134,3 +1134,12 @@ input[type=number] { border-left: 13px solid #DEDEDE; margin-left: -15px; } + +.payform { + text-align: center; +} + +.payform__btn { + font-weight: normal; + cursor: pointer; +} diff --git a/templates/customer/profile/license_list.html b/templates/customer/profile/license_list.html deleted file mode 100644 index 590bc29..0000000 --- a/templates/customer/profile/license_list.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "base.html" %} -{% load pytils_numeral static %} -{% block title %}Мои счета{% endblock %} - -{% block content %} -
| Номер | -Дата счёта | -Срок лицензии | -Сумма | -Вид платежа | -Статус | -Действия | -Отменить заявку | -
|---|---|---|---|---|---|---|---|
| {% if license.pay_sum > 0 %}{{ license.id }}{% else %}--{% endif %} | -{{ license.order_date }} | -{{ license.get_term }} | -{% if license.pay_sum > 0 %}{{ license.pay_sum|get_plural:"рубль,рубля,рублей" }}{% else %}Бесплатно{% endif %} | -{{ license.get_payform_display }} | -{{ license.get_status_display }} | -{{ license.get_action_link|safe }} | -{% if license.status == 0 %}Удалить{% endif %} | -
| Дата оплаты | -По счёту | -Сумма | -Срок лицензии | -Период действия лицензии | -Статус лицензии | -Закрывающие документы | -
|---|---|---|---|---|---|---|
| {{ license.paid_date|default:'-' }} | -{% if license.pay_sum %}{{ license.id }}{% else %}-{% endif %} | -{% if license.pay_sum %}{{ license.pay_sum }}{% else %}-{% endif %} | -{{ license.get_term }} | -{% if license.date_from %}{{ license.date_from }} - {{ license.date_to }}{% else %}-{% endif %} | -{{ license.get_status_display }} {{ license.get_paid_status|default:'' }} |
- Разные документы | -
{{ form.non_field_errors }}
- {% endif %} - -Ошибка при оплате!
+Неудачная оплата!
+Ваш заказ принят!
+