アマゾンMWSでSubmitFeedというAPIがあります。このAPI、「ContentMD5Value」というMD5ハッシュ値をパラメータに沿える必要があったりします。

GoogleAppsScriptでMD5ハッシュ値を取得するなら以下でOKです。

https://gist.github.com/mogsdad/5464686

このモジュールの例で言えば、(変数xmlに対象のファイル内容を保有)

var payload = xml;
var md5_hush = Utilities.base64Encode(signMd5(payload));

普通はこれでOKです。でも、今回のAPIで必要なのは↑のMD5ハッシュ値でなく、対象のファイルのバイナリー値に対するMD5ハッシュ値が必要なんです。

色々と調べましたが、上記で言うpayloadのバイナリー値に対するMD5ハッシュが必要なので、

var blob1 = Utilities.newBlob(payload).getBytes();
var md5_hush = Utilities.base64Encode(signMd5(blob1 ));

こんな事も試しましたがうまくいきませんでした。

今回の問題の内容は以下のサイトの記事が解決方法を記載しています。

http://cloudway.io/post/base64-encoded-128-bit/

ですが、やはりGoogleAppsScriptでは無理なのか?も知れないと思い、諦めてPHPを利用する事にしました。

https://stackoverflow.com/questions/29820014/issue-calculating-md5-hash-of-amazon-marketplace-feed

Content-MD5 => base64_encode(md5($xml, true))

GASからPHPが使えるサーバ上の↑のコードを仕込んだPHPファイルを呼出し、MD5ハッシュしたいファイルの中身をPOSTしてハッシュ値をGASに戻してあげればOKです。

でも、できればPHPを使わないで目的が達成できると嬉しいですね。

追記

上記の総合的な記載記事を追加しました。

Amazon MWS API FEED

もし、参考になったならTwitterシェアお願いしますもし、参考になったならTwitterシェアお願いします