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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
from __future__ import unicode_literals
import time
from django.core.exceptions import ImproperlyConfigured
from django.http import HttpResponseForbidden, HttpResponse
import jwt
from .forms import PaymentForm, ProcessPaymentForm
from ..core import BasicProvider
class GoogleWalletProvider(BasicProvider):
def __init__(self, seller_id, seller_secret,
library='https://sandbox.google.com/checkout/inapp/lib/buy.js',
**kwargs):
self.seller_id = seller_id
self.seller_secret = seller_secret
self.library = library
super(GoogleWalletProvider, self).__init__(**kwargs)
if not self._capture:
raise ImproperlyConfigured(
'Google Wallet does not support pre-authorization.')
def get_jwt_data(self, payment):
current_time = int(time.time())
exp_time = current_time + 3600
jwt_info = {
'iss': self.seller_id,
'aud': 'Google',
'typ': 'google/payments/inapp/item/v1',
'iat': current_time,
'exp': exp_time,
'request': {
'currencyCode': payment.currency,
'price': str(payment.total),
'name': payment.description or 'Total payment',
'sellerData': payment.token}}
return jwt.encode(jwt_info, self.seller_secret)
def get_form(self, payment, data=None):
kwargs = {
'data': data,
'payment': payment,
'provider': self,
'action': '',
'hidden_inputs': False}
return PaymentForm(**kwargs)
def get_process_form(self, payment, request):
return ProcessPaymentForm(payment=payment, provider=self,
data=request.POST or None)
def get_token_from_request(self, payment, request):
form = self.get_process_form(payment, request)
if form.is_valid():
return form.token
def process_data(self, payment, request):
form = self.get_process_form(payment, request)
if not form.is_valid():
return HttpResponseForbidden('FAILED')
form.save()
return HttpResponse(form.order_id)
|