+ def __init__(self, pos_id):
+ self.pos_id = pos_id
+
+ def initiate(self, request, schedule):
+ return reverse('club_payu_rec_payment', args=[schedule.key])
+
+ def invite_widget(self, schedule):
+ 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',
+ {
+ 'form': forms.PayUCardTokenForm(),
+ 'pos': POSS[self.pos_id],
+ 'widget_args': widget_args,
+ 'widget_sig': widget_sig,
+ }
+ )
+
+ def pay(self, request, schedule):
+ # Create order, put it and see what happens next.
+ from .models import PayUOrder
+ if request is not None:
+ ip = request.META['REMOTE_ADDR']
+ else:
+ ip = '127.0.0.1'
+
+ if request is None:
+ if not self.needs_retry(schedule):
+ return
+
+ order = PayUOrder.objects.create(
+ pos_id=self.pos_id,
+ customer_ip=ip,
+ schedule=schedule,
+ )
+ return order.put()
+
+ def needs_retry(self, schedule):
+ retry_last = schedule.payuorder_set.exclude(
+ created_at=None).order_by('-created_at').first()
+ if retry_last is None:
+ return True