diff --git a/src/customer/models.py b/src/customer/models.py
index d138083..15fdcd2 100644
--- a/src/customer/models.py
+++ b/src/customer/models.py
@@ -19,7 +19,7 @@ from django.utils.deconstruct import deconstructible
from django.conf import settings
from customer import consts, managers, utils
-from customer.utils import create_bonus_license
+from customer.utils import create_bonus_license, get_robokassa_url
from myauth.models import DokUser
from commons.utils import only_numerics
from robokassa.signals import result_received, success_page_visited
@@ -584,6 +584,12 @@ class License(models.Model):
if payments:
return payments.first().id
+ def get_payment(self):
+ if self.payform == 1:
+ payments = Payment.objects.filter(order_number=self.id)
+ if payments:
+ return payments.first()
+
# TODO: test
def save(self, *args, **kwargs):
@@ -615,14 +621,13 @@ class License(models.Model):
kwargs={'order_num': self.id}
)
return f'Оплата безналичным платежом'
- # redirect to pay terminal with data
+
elif self.payform == 1:
- if self.get_payment_id():
- url = reverse('payment_robokassa',
- kwargs={'payment_id': self.get_payment_id()})
+ if self.get_payment():
+ url = get_robokassa_url(self.get_payment())
else:
url = '#'
- return f'Оплата банковской картой'
+ return f'Оплата картой, электронными деньгами, наличными'
elif self.status in [1, 2]:
url = reverse(
@@ -639,7 +644,8 @@ class License(models.Model):
return f'Оплата безналичным платежом'
elif self.payform == 1:
- return f'Оплата банковской картой'
+ return f'Оплата картой, ' \
+ f'электронными деньгами, наличными'
else:
return ''
diff --git a/src/customer/utils.py b/src/customer/utils.py
index da5e668..e477181 100644
--- a/src/customer/utils.py
+++ b/src/customer/utils.py
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
+import hashlib
+
from datetime import timedelta
from dateutil.relativedelta import relativedelta
@@ -179,3 +181,30 @@ def create_bonus_license(lic):
cache.set(f'confirm_bonus_days_{lic.company.get_first_user().username}', -1, 3600)
return bonus_license
return False
+
+
+def get_robokassa_url(payment):
+ login = settings.ROBOKASSA_LOGIN
+ inv_id = payment.pk
+ out_summ = format(payment.order_amount, '.2f')
+ desc = 'Оплата лицензии Dokumentor.ru'
+ site = 'https://merchant.roboxchange.com/Index.aspx'
+ if settings.ROBOKASSA_TEST_MODE:
+ site = 'https://auth.robokassa.ru/Merchant/Index.aspx'
+
+ signature = hashlib.md5(
+ f'{login}:{out_summ}:{inv_id}:{settings.ROBOKASSA_PASSWORD1}'.encode("ascii")
+ ).hexdigest().upper()
+
+ params = f'?MerchantLogin={login}' \
+ f'&SignatureValue={signature}' \
+ f'&InvId={inv_id}' \
+ f'&OutSum={out_summ}' \
+ f'&InvDesc={desc}' \
+ f'&Email={payment.user.email}' \
+ f'&Culture=ru'
+
+ if settings.ROBOKASSA_TEST_MODE:
+ params += f'&isTest=1'
+ url = f'{site}{params}'
+ return url
diff --git a/src/customer/views/license.py b/src/customer/views/license.py
index 7ecb91a..f10164f 100644
--- a/src/customer/views/license.py
+++ b/src/customer/views/license.py
@@ -1,25 +1,19 @@
# -*- coding: utf-8 -*-
import json
-import hashlib
-
import itertools
from django.db.models import Count
from django.shortcuts import render, redirect, get_object_or_404
-from django.http import (
- # HttpResponseForbidden,
- HttpResponse, HttpResponseBadRequest)
-from django.conf import settings
-# from django.views.decorators.csrf import csrf_exempt
+from django.http import (HttpResponse, HttpResponseBadRequest)
+
from django.contrib.auth.decorators import login_required
-# from django.template.response import TemplateResponse
from django.core.urlresolvers import reverse
from django.views.decorators.csrf import csrf_protect
from robokassa.forms import RobokassaForm
from customer.models import License, LicensePrice, Payment
from customer.forms import LicenseForm
-from customer.utils import raise_if_no_profile
+from customer.utils import raise_if_no_profile, get_robokassa_url
@login_required
@@ -51,32 +45,7 @@ def order_license(request):
user=request.user,
type=1
)
-
- login = settings.ROBOKASSA_LOGIN
- inv_id = payment.pk
- out_summ = format(payment.order_amount, '.2f')
- desc = 'Оплата лицензии Dokumentor.ru'
- site = 'https://merchant.roboxchange.com/Index.aspx'
- if settings.ROBOKASSA_TEST_MODE:
- site = 'https://auth.robokassa.ru/Merchant/Index.aspx'
-
- signature = hashlib.md5(
- f'{login}:{out_summ}:{inv_id}:{settings.ROBOKASSA_PASSWORD1}'.encode("ascii")
- ).hexdigest().upper()
-
- params = f'?MerchantLogin={login}' \
- f'&SignatureValue={signature}' \
- f'&InvId={inv_id}' \
- f'&OutSum={out_summ}' \
- f'&InvDesc={desc}' \
- f'&Email={payment.user.email}' \
- f'&Culture=ru'
-
- if settings.ROBOKASSA_TEST_MODE:
- params += f'&isTest=1'
- url = f'{site}{params}'
-
- return redirect(url)
+ return redirect(get_robokassa_url(payment))
if form.cleaned_data['payform'] == '0':
Payment.objects.create(
@@ -141,53 +110,6 @@ def delete_license(request, pk):
return HttpResponse(data, content_type='application/json')
-# @csrf_exempt
-# def payment_result(request):
-# if request.method == 'POST':
-# try:
-# nInvId = request.POST.get('InvId')
-#
-# nOutSum = request.POST.get('OutSum')
-# sSignatureValue = request.POST.get('SignatureValue')
-# SignatureValue = hashlib.md5('%s:%s:%s' % (nOutSum, nInvId,
-# settings.ROBOKASSA_PASSWORD2)).hexdigest()
-# if sSignatureValue.upper() == SignatureValue.upper():
-# license = License.objects.get(pk=nInvId)
-# license.status = 1
-# license.save()
-# return HttpResponse('OK%s' % nInvId)
-# else:
-# return HttpResponse('bad sign')
-# except License.DoesNotExist:
-# return HttpResponseForbidden()
-# else:
-# return HttpResponseForbidden()
-
-
-# @csrf_exempt
-# def payment_success(request):
-# nInvId = request.GET.get('orderNumber')
-# # order = License.objects.get(pk=nInvId)
-# context = {'success': True, 'order_num': nInvId}
-# return TemplateResponse(request, 'customer/profile/end_order.html', context)
-#
-#
-# @csrf_exempt
-# def payment_fail(request):
-# try:
-# # nInvId = request.GET.get('')
-#
-# message = u"Возникла проблема. Ваш Заказ не оплачен. " \
-# u"Попробуйте оформить заявку снова, или позвоните по номеру."
-#
-# return TemplateResponse(
-# request,
-# 'customer/profile/end_order.html',
-# {'message': message, 'success': False})
-# except:
-# return HttpResponseForbidden()
-
-
@login_required
def orders_list(request):
"""List license and account for license in one page"""
diff --git a/templates/robokassa/error.html b/templates/robokassa/error.html
index 74f2cf7..62f38b1 100644
--- a/templates/robokassa/error.html
+++ b/templates/robokassa/error.html
@@ -2,10 +2,13 @@
{% block title %}Ошибка при оплате{% endblock %}
-{% block right-column %}{% endblock %}
{% block content %}
-
Опс!
-
Ошибка при оплате!
+
Возникли проблемы с оплатой
+
Что-то пошло не так и оплатить лицензию не получилось :(
+
Пожалуйста, попробуйте снова
+
Ссылку на оплату, историю всех расчётов и купленных лицензий всегда можно найти на странице
+ Лицензии и расчёты.
+ {{ form.as_p }}
{% endblock %}
diff --git a/templates/robokassa/fail.html b/templates/robokassa/fail.html
index ae49479..da2bd9c 100644
--- a/templates/robokassa/fail.html
+++ b/templates/robokassa/fail.html
@@ -4,7 +4,11 @@
{% block content %}
-
Опс!
-
Неудачная оплата!
+
Возникли проблемы с оплатой
+
Что-то пошло не так и оплатить лицензию не получилось :(
+
Пожалуйста, попробуйте снова
+
Ссылку на оплату, историю всех расчётов и купленных лицензий всегда можно найти на странице
+ Лицензии и расчёты.
+ {{ form.as_p }}
{% endblock %}