Skip to content

Commit 1d97fe6

Browse files
committed
[FIX] Now the module is python3 compatible.
1 parent 03570f5 commit 1d97fe6

File tree

2 files changed

+11
-15
lines changed

2 files changed

+11
-15
lines changed

redsys/client.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# -*- coding: utf-8 -*-
2-
32
import re
43
import hashlib
54
import json
65
import base64
76
import hmac
8-
import ast
97
from Crypto.Cipher import DES3
108
from abc import ABCMeta, abstractmethod
119
from . import currencies, languages, transactions
@@ -39,23 +37,21 @@ def create_request(self):
3937

4038
@abstractmethod
4139
def create_response(self, signature, parameters, signature_version=DEFAULT_SIGNATURE_VERSION):
42-
pass
40+
raise NotImplemented
4341

4442
@abstractmethod
4543
def prepare_request(self, request):
46-
pass
44+
raise NotImplemented
4745

4846
def encode_parameters(self, parameters):
49-
encoded_parameters = (json.dumps(parameters)).encode()
50-
return ''.join(unicode(base64.encodestring(encoded_parameters), 'utf-8').splitlines())
47+
return base64.b64encode(json.dumps(parameters).encode('utf-8'))
5148

5249
def decode_parameters(self, parameters):
53-
decoded_parameters = base64.standard_b64decode(parameters)
54-
return ast.literal_eval(decoded_parameters)
50+
return json.loads(base64.b64decode(parameters).decode('utf-8'))
5551

5652
def encrypt_3DES(self, order):
57-
pycrypto = DES3.new(base64.standard_b64decode(self.secret_key), DES3.MODE_CBC, IV=b'\0\0\0\0\0\0\0\0')
58-
order_padded = order.ljust(16, b'\0')
53+
pycrypto = DES3.new(base64.b64decode(self.secret_key), DES3.MODE_CBC, IV=b'\0\0\0\0\0\0\0\0')
54+
order_padded = order.ljust(16, u'\x00')
5955
return pycrypto.encrypt(order_padded)
6056

6157
def sign_hmac256(self, encrypted_order, merchant_parameters):
@@ -72,10 +68,10 @@ class RedirectClient(Client):
7268

7369
def create_response(self, signature, merchant_parameters, signature_version=DEFAULT_SIGNATURE_VERSION):
7470
response = Response(self.decode_parameters(merchant_parameters))
75-
calculated_signature = self.generate_signature(response.order, merchant_parameters)
76-
alphanumeric_characters = re.compile('[^a-zA-Z0-9]')
77-
safe_signature = re.sub(alphanumeric_characters, '', signature)
78-
safe_calculated_signature = re.sub(alphanumeric_characters, '', calculated_signature)
71+
calculated_signature = self.generate_signature(response.order, merchant_parameters.encode('utf-8'))
72+
alphanum = re.compile('[^a-zA-Z0-9]')
73+
safe_signature = re.sub(alphanum, '', signature)
74+
safe_calculated_signature = re.sub(alphanum, '', calculated_signature.decode('utf-8'))
7975
if safe_signature != safe_calculated_signature:
8076
raise ValueError("The provided signature is not valid.")
8177
return response

redsys/response.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class Response(object):
8888
_parameters = {}
8989

9090
def __init__(self, parameters):
91-
MERCHANT_PARAMETERS_MAP_REVERSE = {value: key for key, value in MERCHANT_PARAMETERS_MAP.iteritems()}
91+
MERCHANT_PARAMETERS_MAP_REVERSE = {value: key for key, value in MERCHANT_PARAMETERS_MAP.items()}
9292
for key, value in parameters.items():
9393
clean = getattr(self, "clean_%s" % MERCHANT_PARAMETERS_MAP_REVERSE[key], None)
9494
self._parameters[MERCHANT_PARAMETERS_MAP_REVERSE[key]] = clean(value) if clean else value

0 commit comments

Comments
 (0)