1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
from __future__ import unicode_literals
try:
from django.forms.utils import flatatt
except ImportError:
from django.forms.util import flatatt
from django.forms.widgets import Input, HiddenInput
from django.utils.html import format_html
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
class StripeCheckoutWidget(Input):
is_hidden = True
def __init__(self, provider, payment, *args, **kwargs):
attrs = kwargs.get('attrs', {})
kwargs['attrs'] = {
'class': 'stripe-button',
'data-key': provider.public_key,
'data-image': provider.image,
'data-name': provider.name,
'data-description': payment.description or _('Total payment'),
# Stripe accepts cents
'data-amount': int(payment.total * 100),
'data-currency': payment.currency
}
kwargs['attrs'].update(attrs)
super(StripeCheckoutWidget, self).__init__(*args, **kwargs)
def render(self, name, value, attrs=None):
if value is None:
value = ''
final_attrs = dict(attrs or {}, src='https://checkout.stripe.com/checkout.js')
final_attrs.update(self.attrs)
del final_attrs['id']
if value != '':
# Only add the 'value' attribute if a value is non-empty.
final_attrs['value'] = force_text(self._format_value(value))
return format_html('<script{0}></script>', flatatt(final_attrs))
class StripeWidget(HiddenInput):
class Media:
js = ['https://js.stripe.com/v2/',
'js/payments/stripe.js']
def __init__(self, attrs=None):
attrs = dict(attrs or {}, id='id_stripe_token')
super(StripeWidget, self).__init__(attrs)
|