teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コード全文を追記

2018/01/09 04:38

投稿

pockygame
pockygame

スコア17

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,7 @@
8
8
  そのツールでの計算と一致しません。
9
9
 
10
10
  ========
11
+ ```Python
11
12
  import hmac
12
13
  import hashlib
13
14
  import base64
@@ -24,6 +25,7 @@
24
25
  print(h.hexdigest())
25
26
  print(base64.b64encode(h.digest()))
26
27
 
28
+ ```
27
29
  ========
28
30
 
29
31
  ※取得した秘密キーと署名対象の文字列にはそれぞれ本当のキーを入れています
@@ -31,4 +33,68 @@
31
33
  どなたか何か可能性でも良いのでご指摘いただけますと幸いです。
32
34
  よろしくお願い致します。
33
35
 
34
- (参照元ブログ)https://tech.torico-corp.com/blog/amazon-marketplace-mws-api/
36
+ (参照元ブログ)https://tech.torico-corp.com/blog/amazon-marketplace-mws-api/
37
+
38
+ 【2018/01/09追記】
39
+ 署名対象の文字列を実行する部分のコードも合わせて転記させていただきます。
40
+ (実行しているコード全文です)
41
+
42
+ ```Python
43
+ import base64
44
+ import datetime
45
+ import hashlib
46
+ import hmac
47
+ from urllib import quote
48
+
49
+ import requests
50
+
51
+ AMAZON_CREDENTIAL = {
52
+ 'SELLER_ID': 'セラーID',
53
+ 'ACCESS_KEY_ID': 'AWSアクセスキーID',
54
+ 'ACCESS_SECRET': 'アクセスシークレット',
55
+ }
56
+
57
+ DOMAIN = 'mws.amazonservices.jp'
58
+ ENDPOINT = '/Orders/2013-09-01'
59
+
60
+
61
+ def datetime_encode(dt):
62
+ return dt.strftime('%Y-%m-%dT%H:%M:%SZ')
63
+
64
+ timestamp = datetime_encode(datetime.datetime.utcnow())
65
+
66
+ last_update_after = datetime_encode(
67
+ datetime.datetime.utcnow() - datetime.timedelta(days=1))
68
+
69
+ data = {
70
+ 'AWSAccessKeyId': AMAZON_CREDENTIAL['ACCESS_KEY_ID'],
71
+ 'Action': 'ListOrders',
72
+ 'MarketplaceId.Id.1': 'A1VC38T7YXB528',
73
+ 'SellerId': AMAZON_CREDENTIAL['SELLER_ID'],
74
+ 'SignatureMethod': 'HmacSHA256',
75
+ 'SignatureVersion': '2',
76
+ 'Timestamp': timestamp,
77
+ 'Version': '2013-09-01',
78
+ 'LastUpdatedAfter': last_update_after,
79
+ }
80
+
81
+ query_string = '&'.join('{}={}'.format(
82
+ n, quote(v, safe='%')) for n, v in sorted(data.items()))
83
+
84
+ canonical = "{}\n{}\n{}\n{}".format(
85
+ 'POST', DOMAIN, ENDPOINT, query_string
86
+ )
87
+
88
+ h = hmac.new(
89
+ bytes(AMAZON_CREDENTIAL['ACCESS_SECRET']),
90
+ bytes(canonical), hashlib.sha256)
91
+
92
+ signature = quote(base64.b64encode(h.digest()), safe='')
93
+
94
+ url = 'https://{}{}?{}&Signature={}'.format(
95
+ DOMAIN, ENDPOINT, query_string, signature)
96
+
97
+ response = requests.post(url)
98
+
99
+ print(response.content.decode())
100
+ ```