Dmitriy Shesterkin 9 years ago
parent 4f4dfcb557
commit 6f9fd77ae0
  1. 20
      src/customer/models.py
  2. 29
      src/customer/utils.py
  3. 86
      src/customer/views/license.py
  4. 9
      templates/robokassa/error.html
  5. 8
      templates/robokassa/fail.html

@ -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'<a href="{url}">Оплата безналичным платежом</a>'
# 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'<a href="{url}">Оплата банковской картой</a>'
return f'<a href="{url}">Оплата картой, электронными деньгами, наличными</a>'
elif self.status in [1, 2]:
url = reverse(
@ -639,7 +644,8 @@ class License(models.Model):
return f'<a href="#" class="not-active">Оплата безналичным платежом</a>'
elif self.payform == 1:
return f'<a href="#" class="not-active">Оплата банковской картой</a>'
return f'<a href="#" class="not-active">Оплата картой, ' \
f'электронными деньгами, наличными</a>'
else:
return ''

@ -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

@ -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"""

@ -2,10 +2,13 @@
{% block title %}Ошибка при оплате{% endblock %}
{% block right-column %}{% endblock %}
{% block content %}
<div id="content">
<h2>Опс!</h2>
<p>Ошибка при оплате!</p>
<h2>Возникли проблемы с оплатой</h2>
<p>Что-то пошло не так и оплатить лицензию не получилось :(</p>
<p>Пожалуйста, попробуйте снова</p>
<p>Ссылку на оплату, историю всех расчётов и купленных лицензий всегда можно найти на странице
<a href="{% url 'customer-orders' %}">Лицензии и расчёты.</a></p>
{{ form.as_p }}
</div>
{% endblock %}

@ -4,7 +4,11 @@
{% block content %}
<div id="content">
<h2>Опс!</h2>
<p>Неудачная оплата!</p>
<h2>Возникли проблемы с оплатой</h2>
<p>Что-то пошло не так и оплатить лицензию не получилось :(</p>
<p>Пожалуйста, попробуйте снова</p>
<p>Ссылку на оплату, историю всех расчётов и купленных лицензий всегда можно найти на странице
<a href="{% url 'customer-orders' %}">Лицензии и расчёты.</a></p>
{{ form.as_p }}
</div>
{% endblock %}

Loading…
Cancel
Save