今回は、AmazonのAPI(MWS)を利用していて急にエラーが返って来るようになったって話です。
完全に自分用のメモです。
AmazonのAPIを実行していたらこんなエラーが返ってきました↓
This XML file does not appear to have any style information associated with it. The document tree is shown below. <ErrorResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> <Error> <Type>Sender</Type> <Code>RequestExpired</Code> <Message> Request signature is too far in the future. Timestamp date: 2018-04-03T21:23:07Z </Message> </Error> <RequestID>f05b616f-7cc6-4885-8572-1623d685a005</RequestID> </ErrorResponse>
ついさっきまではちゃんとAmazonから商品情報を取得できていたのに、ある時から急に正常に取得できなくなりレスポンスを見ると上記のエラーで返ってくるようになってしまいました。
「うーん、これはAmazon側の障害かも」
淡い期待を胸にこの日は床に就きました。
翌朝、再度実行してみると、、、、やっぱ変わってない!!
こりゃ自力で解決するしかないか。
いろいろ調べていくうちに、
結論から言うとタイムスタンプがおかしいということらしい。
「Request signature is too far in the future」(翻訳すると「タイムスタンプが(遠い?)将来」)
実行した時点では2018年4月3日AM6:00頃だったんですが、
タイムスタンプが未来の日時になってることに気づきました。
Timestamp date: 2018-04-03T21:23:07Z
ツールのソース(VBA)を確認してみるとコレが原因ってことが判明。
timestamp = Format(Date, "yyyy-mm-dd") & "T" & Format(CDate(DateAdd("h", -9, Time)), "hh%3AMM%3Ass") & "Z"
なるほど、米国時間に合わせて時間は9時間戻しているんですが、日付の方はそのままじゃん!
朝6時の時点では日本では4/3ですが、米国は9時間前だからまだ日付が変わっていないってことですね!
最近まで使えていたのは何故?ってのもこれですね。
日本で午前9時以降に実行していたら米国の日付も日本と同じになっているから問題なく動いていたってことか、、、
ひとまず下記の修正を加えました。
timestamp = Format(CDate(DateAdd("h", -9, Now)), "yyyy-mm-dd") & _ "T" & Format(CDate(DateAdd("h", -9, Time)), "hh%3AMM%3Ass") & "Z"
前半の
Format(Date, "yyyy-mm-dd")
を
Format(CDate(DateAdd("h", -9, Now)), "yyyy-mm-dd")
にして、日付も9時間前の日付になるように修正しました。
ちなみに今回の問題は、PAAPI版のAmazonツールをMWS版にカスタマイズ中に問題発生。
何故かPAAPIの場合はこの修正前のタイムスタンプで問題なく動いてました。
PAAPIはその辺は緩いんでしょうか。
この記事へのコメントはありません。