· 5 years ago · Apr 13, 2020, 02:46 PM
1timestamp = strftime("%Y-%m-%dT%H:%M:%SZ", gmtime())
2params = {
3 'AWSAccessKeyId': event_data['aws_access_key'],
4 'Action' : 'CreateFulfillmentOrder',
5 'SellerId': event_data['aws_seller_id'],
6 'SignatureVersion': '2',
7 'Timestamp': timestamp,
8 'Version': '2010-10-01',
9 'SignatureMethod': 'HmacSHA256',
10 'DestinationAddress.City': ticket['City'],
11 'DestinationAddress.CountryCode' : "US",
12 'DestinationAddress.Line1' : ticket['Address 1'],
13 'DestinationAddress.Line2' : ticket['Address 2'],
14 'DestinationAddress.Name' : ticket['Full Name'],
15 'DestinationAddress.PostalCode' : ticket['Zip'],
16 'DestinationAddress.StateOrProvinceCode' : ticket['State'],
17 'DisplayableOrderComment' : 'Thank You',
18 'DisplayableOrderDateTime' : timestamp,
19 'DisplayableOrderId' : ticket['Replacement Order ID (For FBA)'],
20 'Items.member.1.DisplayableComment' : 'Thank You',
21 'Items.member.1.Quantity' : ticket['Qty of Send Item'],
22 'Items.member.1.SellerFulfillmentOrderItemId' :ticket['Replacement Order ID (For FBA)'] ,
23 'Items.member.1.SellerSKU' : ticket['Item To Send'],
24 'SellerFulfillmentOrderId' : ticket['Replacement Order ID (For FBA)'],
25 'ShippingSpeedCategory' : ticket['Shipping Priority'].title()
26}
27request_description = ''
28for key in sorted(params):
29 encoded_value = quote(params[key], safe='-_.~')
30 request_description += '&{}={}'.format(key, encoded_value)
31request_description = request_description[1:]
32signature = aws_calc_signature(request_description)
33url = "{domain}{uri}?{description}&Signature={signature}".format(
34 domain='https://mws.amazonservices.com',
35 uri='/FulfillmentOutboundShipment/2010-10-01',
36 description=request_description,
37 signature=quote(signature),
38)
39
40def aws_calc_signature(request_description):
41 secret_key = event_data['aws_secret_key']
42 method = "POST"
43 domain = 'mws.amazonservices.com'
44 uri = '/FulfillmentOutboundShipment/2010-10-01'
45 sig_data = '\n'.join([
46 method,
47 domain.replace('https://', '').lower(),
48 uri,
49 request_description
50 ])
51 return base64.b64encode(hmac.new(secret_key.encode(), sig_data.encode(), hashlib.sha256).digest())