X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/3b0dd45f80df3512dabe75506e635a0f6e3a87e3..da1171ae5f512c20c68a0616b3157ae9927a6f1f:/src/club/payment_methods.py?ds=sidebyside diff --git a/src/club/payment_methods.py b/src/club/payment_methods.py index e74ae83ca..4a596e45b 100644 --- a/src/club/payment_methods.py +++ b/src/club/payment_methods.py @@ -1,10 +1,14 @@ # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from hashlib import sha256 from django.conf import settings from django.urls import reverse from django.utils.timezone import now +from django.utils.translation import get_language from paypal.rest import agreement_approval_url +from django.template.loader import render_to_string +from .payu import POSS class PaymentMethod(object): @@ -28,6 +32,15 @@ class PayU(PaymentMethod): def __init__(self, pos_id): self.pos_id = pos_id + def invite_widget(self, schedule, request): + return render_to_string( + 'club/payment/payu_invite.html', + { + 'schedule': schedule, + }, + request=request + ) + def initiate(self, request, schedule): # Create Order at once. from .models import PayUOrder @@ -54,6 +67,38 @@ class PayURe(PaymentMethod): def initiate(self, request, schedule): return reverse('club_payu_rec_payment', args=[schedule.key]) + def invite_widget(self, schedule, request): + from . import forms + pos = POSS[self.pos_id] + widget_args = { + 'merchant-pos-id': pos.pos_id, + 'shop-name': "SHOW NAME", + 'total-amount': str(int(schedule.amount * 100)), + 'currency-code': pos.currency_code, + 'customer-language': get_language(), # filter to pos.languages + 'customer-email': schedule.email, + 'store-card': 'true', + 'recurring-payment': 'true', + } + widget_sig = sha256( + ( + "".join(v for (k, v) in sorted(widget_args.items())) + + pos.secondary_key + ).encode('utf-8') + ).hexdigest() + + return render_to_string( + 'payu/rec_widget.html', + { + 'schedule': schedule, + 'form': forms.PayUCardTokenForm(), + 'pos': POSS[self.pos_id], + 'widget_args': widget_args, + 'widget_sig': widget_sig, + }, + request=request + ) + def pay(self, request, schedule): # Create order, put it and see what happens next. from .models import PayUOrder @@ -104,14 +149,25 @@ class PayPal(PaymentMethod): is_recurring = True is_onetime = False + def invite_widget(self, schedule, request): + if settings.PAYPAL_ENABLED: + return render_to_string( + 'club/payment/paypal_invite.html', + { + 'schedule': schedule, + }, + request=request + ) + else: + return '' + def initiate(self, request, schedule): app = request.GET.get('app') return agreement_approval_url(schedule.amount, schedule.key, app=app) def pay(self, request, schedule): - from datetime import date, timedelta, datetime - from pytz import utc - tomorrow = datetime(*(date.today() + timedelta(2)).timetuple()[:3], tzinfo=utc) + from datetime import date, timedelta, datetime, timezone + tomorrow = datetime(*(date.today() + timedelta(2)).timetuple()[:3], tzinfo=timezone.utc) any_active = False for ba in schedule.billingagreement_set.all(): active = ba.check_agreement()