From 6f9fd77ae06200d4c4e9ce9f339fdd5b0986379a Mon Sep 17 00:00:00 2001 From: Dmitriy Shesterkin Date: Mon, 17 Jul 2017 19:03:17 +0300 Subject: [PATCH] debug --- src/customer/models.py | 20 +++++--- src/customer/utils.py | 29 ++++++++++++ src/customer/views/license.py | 86 ++-------------------------------- templates/robokassa/error.html | 9 ++-- templates/robokassa/fail.html | 8 +++- 5 files changed, 58 insertions(+), 94 deletions(-) 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 %}