· 5 years ago · Jul 16, 2020, 04:06 PM
1import json
2import smtplib
3import dropbox
4import sys, os, base64, datetime, hashlib, hmac
5import requests
6from urllib.request import Request, urlopen
7
8#pip install Requests, dropbox
9
10order_number = "57252"
11
12## Get Email
13
14values = """
15 {
16 "id_token": "id token",
17 "refresh_token": "refresh token"
18 }
19"""
20
21headers = {
22 'Content-Type': 'application/json'
23}
24
25values = values.encode()
26
27request = Request('https://api.orderhive.com/setup/refreshtokenviaidtoken', data=values, headers=headers)
28response_body = urlopen(request).read()
29
30data = json.loads(response_body)
31
32access_key = data['access_key_id']
33secret_key = data['secret_key']
34session_token = data['session_token']
35id_token = data['id_token']
36
37method = 'POST'
38service = 'execute-api'
39host = 'api.orderhive.com'
40region = 'us-east-1'
41endpoint = 'https://api.orderhive.com'
42content_type = 'application/json'
43
44def sign(key, msg):
45 return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
46
47def getSignatureKey(key, date_stamp, regionName, serviceName):
48 kDate = sign(('AWS4' + key).encode('utf-8'), date_stamp)
49 kRegion = sign(kDate, regionName)
50 kService = sign(kRegion, serviceName)
51 kSigning = sign(kService, 'aws4_request')
52 return kSigning
53
54
55t = datetime.datetime.utcnow()
56amzdate = t.strftime('%Y%m%dT%H%M%SZ')
57datestamp = t.strftime('%Y%m%d')
58
59canonical_uri = '/orders/salesorder'
60
61request_parameters = "{"
62request_parameters += '"query":"' + order_number + '"'
63request_parameters += "}"
64
65canonical_querystring = ''
66canonical_headers = 'content-type:application/json' + '\n' + 'host:' + host + '\n' + 'id_token:' + id_token + '\n' + 'x-amz-date:' + amzdate + '\n' + 'x-amz-security-token:' + session_token + '\n'
67signed_headers = 'content-type;host;id_token;x-amz-date;x-amz-security-token'
68payload_hash = hashlib.sha256(request_parameters.encode('utf-8')).hexdigest()
69canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash
70algorithm = 'AWS4-HMAC-SHA256'
71credential_scope = datestamp + '/' + region + '/' + service + '/' + 'aws4_request'
72string_to_sign = algorithm + '\n' + amzdate + '\n'+ credential_scope + '\n' + hashlib.sha256(canonical_request.encode('utf-8')).hexdigest()
73signing_key = getSignatureKey(secret_key, datestamp, region, service)
74signature = hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest()
75authorization_header = algorithm + ' ' + 'Credential=' + access_key + '/' + credential_scope + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature
76headers = { 'Content-Type': 'application/json', 'id_token':id_token, 'X-amz-security-token':session_token, 'X-amz-date':amzdate, 'Authorization':authorization_header
77 }
78request_url = endpoint + canonical_uri
79r = requests.post(request_url, data=request_parameters, headers=headers)
80data = r.text
81
82jsondata = json.loads(data)
83jsondata.keys()
84
85EMAIL_ADDRESS = jsondata['data'][0]['shipping_address']['email']
86
87## get link
88
89dbx = dropbox.Dropbox("DropBox Token Here")
90shared_link_metadata = dbx.sharing_create_shared_link("/DropBox Uploads/" + order_number)
91
92## send email
93
94def send_email(subject, msg):
95 try:
96 server = smtplib.SMTP('smtp.gmail.com:587')
97 server.ehlo()
98 server.starttls()
99 server.login(EMAIL_ADDRESS, PASSWORD)
100 message = 'Subject: {}\n\n{}'.format(subject, msg)
101 server.sendmail(EMAIL_ADDRESS, EMAIL_ADDRESS, message)
102 server.quit()
103 print("Success: Email sent!")
104 except:
105 print("Email failed to send.")
106
107subject = "Hello"
108
109send_email(subject, msg)