MWS SubmitFeed с помощью скрипта Google Apps - PullRequest
0 голосов
/ 23 апреля 2020

Я пытался обновить цены на свои товары, но в моем коде это не работает должным образом. В ответе говорится что-то вроде этого:

Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой 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, чтобы проверить, есть ли что-то не так с выводом, но я пока не смог найти ничего.

Может кто-нибудь сказать мне, что я пропускаю или делаю это неправильно.

Заранее спасибо.

...