Я пытался обновить цены на свои товары, но в моем коде это не работает должным образом. В ответе говорится что-то вроде этого:
Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой AWS секретный ключ доступа и метод подписи. Подробности см. В документации по обслуживанию.
Для других действий у моей подписи нет проблем, но только для операций submitFeed я получил эту ошибку.
Вот что я написал в своей code.gs:
function makeUrl_SubmitFeed(object) {
var properties = PropertiesService.getScriptProperties();
var __AWSAccessKeyId__ = properties.getProperty("awsAccessKeyId");
var __SellerID__ = properties.getProperty("sellerId");
var __AWSSecretKey__ = properties.getProperty("awsSecretKey");
var mySku = "abcde-12345";
var feed = '<?xml version="1.0" encoding="utf-8"?>' +
'<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">' +
'<Header><DocumentVersion>1.01</DocumentVersion>' +
'<MerchantIdentifier>' + __SellerID__ + '</MerchantIdentifier>' +
'</Header>' +
'<MessageType>Price</MessageType>' +
'<Message><MessageID>1</MessageID>' +
'<Price>' +
'<SKU>' + mySku + '</SKU>' +
'<StandardPrice currency="JPY">9000</StandardPrice>' +
'</Price>' +
'</Message>' +
'</AmazonEnvelope>';
var fileName = "updateFile.xml"
var file = folder.createFile(fileName, feed, "application/xml");
var blob = file.getBlob();
var md5 = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, feed));
var __baseurl__ = "https://mws.amazonservices.jp";
var api = "/Feeds/";
var version = "2009-01-01";
var action = "SubmitFeed";
var feedType = "_POST_PRODUCT_PRICING_DATA_";
var method = "POST";
//create params
var params = {};
params["AWSAccessKeyId"] = __AWSAccessKeyId__;
params["Merchant"] = __SellerID__;
params["SignatureVersion"] = "2";
params["SignatureMethod"] = "HmacSHA256";
params["Action"] = action;
params["FeedType"] = feedType;
params["ContentMD5Value"] = md5;
params["MarketplaceIdList.Id.1"] = "A1VC38T7YXB528";
params["Timestamp"] = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
params["Version"] = version;
//create signature
var parts = []
parts.push(method);
parts.push("mws.amazonservices.jp");
parts.push("/");
var data = []
for(var key in params){
var value = params[key];
data.push(key + '=' + encodeURIComponent(value));
}
data.sort();
parts.push(data.join("&"));
var sign_data = parts.join("\n");
var signature = Utilities.base64Encode(Utilities.computeHmacSha256Signature(sign_data, __AWSSecretKey__, Utilities.Charset.UTF_8));
data.push('Signature=' + encodeURIComponent(signature));
data.sort();
var url = __baseurl__ + api + version + '?' + data.join("&");
var header = {
"Content-MD5": md5,
"Content-Type": "text/xml",
}
var params = {
headers: {
header: header
},
method: "POST",
payload : blob,
muteHttpExceptions : true,
}
var response = UrlFetchApp.fetch(url, params);
var data = response.getContentText();
var responseCode = response.getResponseCode();
Logger.log(data);
Logger.log(responseCode); //returned 403
}
Я использовал Amazon MWS Scratchpad, чтобы проверить, есть ли что-то не так с выводом, но я пока не смог найти ничего.
Может кто-нибудь сказать мне, что я пропускаю или делаю это неправильно.
Заранее спасибо.