· 7 years ago · Nov 11, 2018, 08:56 AM
1#this would be signature.py, this is where we have the functions that generate the signature
2client_request_id = int(time.time()*1000) - 1
3api_key = '5e9089d4fc44c3c357b4d46b91a52b440ac6acf7b5680caebb695994ad27750c'
4secret_key = bytearray('3e76857dd94e6d07eddd946a11f2211874bf7e89c85b49e8b4a3c3afdee5fbbe', 'utf-8')
5endpoint = 'digital-issue'
6latest_timestamp = 0
7
8def generate_timestamp():
9 return str(int(round(time.time() * 1000)))
10
11def generate_signature_seed(request_type, brand, face_value):
12 face_value = str(face_value)
13 latest_timestamp = generate_timestamp()
14 return api_key + '-' + request_type + '-' + endpoint + '-' + str(client_request_id) + '-' + brand + '-' + 'GBP' + '-' + face_value + '-' + latest_timestamp
15
16def generate_signature(request_type, brand, face_value):
17 seed = generate_signature_seed(request_type, brand, face_value)
18 signature_hmac = hmac.new(secret_key, bytearray(seed, 'utf-8'), hashlib.sha256)
19 signature = str(signature_hmac.hexdigest())
20
21 return signature
22
23#this is where we make our request (separate file)
24def generate_branded_request(request_type, brand, face_value):
25 payload = {
26 'client_request_id': str(signature.client_request_id),
27 'brand': brand,
28 'face_value': {
29 'amount': face_value,
30 'currency': 'GBP'
31 },
32 'delivery_method': 'code',
33 'fulfilment_by': 'rewardcloud',
34 'fulfilment_parameters': {
35 'to_name': 'Vlad',
36 'to_email': 'vlad@hotmail.com',
37 'from_name': 'Reward Cloud',
38 'from_email': 'noreply@reward.cloud',
39 'subject': '[TestCode] Here is your gift card!'
40 },
41 'personalisation': {
42 'to_name': 'Recipient',
43 'from_name': 'Sender',
44 'message': 'Here is your gift',
45 'template': 'standard'
46 },
47 'sector': 'voluntary-benefits'
48 }
49 header = boilerplate_header
50 header['Signature'] = signature.generate_signature(request_type, brand, face_value)
51 header['Timestamp'] = signature.generate_timestamp()
52 url = 'https://app.sandbox.reward.cloud/api/v2/digital/issue'
53 response = requests.request(request_type, url, headers=header, data = payload)
54 return response
55
56#print(generate_branded_request("POST", "nike", 10).text) would be {"code":"434","status":"error","message":"Authentication failed"}