Amazon MWS API FEED
API GAS PHP
Lastmod: 2019-10-19
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//Feed用
var namespace3 = "http://mws.amazonaws.com/doc/2009-01-01/";
var namespace4='"http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd"';

/*************************************************************************
 SubmitFeed
 FeedType=_POST_INVENTORY_AVAILABILITY_DATA_
 
 <<トランザクショ>>
 SubmitFeed 「リクエスト送信してFeedSubmissionIdを取得」
  =>GetFeedSubmissionList(FeedSubmissionId)「FeedSubmissionIdにてオペレーション送信」
     =>GetFeedSubmissionResult(FeedSubmissionId)「オペレーション完了する」
*************************************************************************/
function putFeedSubmit() {
    var u = "https://" + mws_address + "/?";

    //任意の値を設定します
    var sku1        = "test-6";
    var quantity1   = "1";
    var leadTimeToShip1 = "7";

    var AWS_KEYS = "XXXXXXXXXX";
    var AWS_SCEC="11444AAAAAAADDDDDD";
    var SellerId= "AAAAQ44444444";
    var MWS_VERSION="2009-01-01";
    var mws_address = "mws.amazonservices.jp";

    //XMLファイルのひな形にパラメータを埋め込む
    var payload = '<?xml version="1.0" encoding="utf-8"?>';
        payload += '<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">';
        payload += "<Header>";
        payload += "<DocumentVersion>1.01</DocumentVersion>";
        payload += "<MerchantIdentifier>"+SellerId+"</MerchantIdentifier>";
        payload += "</Header>";
        payload += "<MessageType>Inventory</MessageType>";
        payload += "<Message>";
        payload += "<MessageID>1</MessageID>";
        payload += "<OperationType>Update</OperationType>";
        payload += "<Inventory>";
        payload += "<SKU>"+sku1+"</SKU>";
        payload += "<Quantity>"+quantity1+"</Quantity>";
        payload += "<FulfillmentLatency>"+leadTimeToShip1+"</FulfillmentLatency>";
        payload += "</Inventory>";
        payload += "</Message>";
        payload += " </AmazonEnvelope>";

    /*******************************************************************************
     ContentMD5Value用のMD5ハッシュ(バイナリー値)取得の為にPHPプログラムを呼出しする(ここから)
    Google Apps ScriptよりPHPを呼出しPOSTするサンプル
    *******************************************************************************/
    //<<** 自運営サイト参照用 **>>
    //var url = 'https://okanemochi.tk/md5/index5.php';
        //<<** heroku登録APP参照用 **>>
    var url = 'https://getmd5hushed.herokuapp.com/';   
    
    var option = {
      "method":"POST",
      "Content-Type": "application/json",
      "payload": payload,
      "muteHttpExceptions" : true,
    }   
    var response = UrlFetchApp.fetch(url,option);  
    var data = JSON.parse(response.getContentText());
   f_hush=data["message"];
   
    /*******************************************************************************
     ContentMD5Value用のMD5ハッシュ(バイナリー値)取得の為にPHPプログラムを呼出しする(ここまで)
    *******************************************************************************/
     
    // *** 以下、署名に必要なパラメーター (ここから)***
    var o1 = {
        "Version": MWS_VERSION,
        "Action": "SubmitFeed",
        "AWSAccessKeyId": AWS_KEYS,
        "Merchant": SellerId,
        "SignatureVersion": "2",
        "Timestamp": new Date().toISOString(),
        "SignatureMethod": "HmacSHA256",
        "MarketplaceIdList.Id.1": "A1VC38T7YXB528",
        "FeedType":"_POST_INVENTORY_AVAILABILITY_DATA_",
        //"FeedType":"_POST_PRODUCT_DATA_",
        "PurgeAndReplace":"false",
        "ContentMD5Value": f_hush
    }
    var a = Object.keys(o1).sort();
    a = a.map(function (key) {
        return key + "=" + encodeURIComponent(o1[key]);
    });   
    var sign  = "POST" + "\n";
    sign += mws_address + "\n";
    sign += "/\n";
    sign += a.join("&");
    var x = Utilities.base64Encode(Utilities.computeHmacSha256Signature(sign, AWS_SCEC));
    
    // *** 署名作成(変数x) (ここまで)***
 
    //API接続用のURL生成
    var uri = "https://"+ mws_address +"/?";
    uri += a.join("&")+ "&Signature=" + encodeURIComponent(x);
    
    //API接続時のPOST情報生成
    var urlFetchOption = {
        "method" : "POST",
        "Content-Type": "application / xml; charset = utf-8 ",
        "payload": payload,
        "muteHttpExceptions" : true
    };
    
    var r = UrlFetchApp.fetch(uri, urlFetchOption);
    var document = XmlService.parse(r.getContentText());
    
    var root = document.getRootElement();
    var NS3 = XmlService.getNamespace(namespace3);
    var respone_node = root.getQualifiedName();
    
    //エラー確認
    if (respone_node == "ErrorResponse") {
        //var res = _sleep(10);
        return 9999;
    }

  //データ取得
    var AttributeSets = root.getChild("SubmitFeedResult", NS3).getChild("FeedSubmissionInfo", NS3);
    var FeedSubmissionId = AttributeSets.getChild("FeedSubmissionId", NS3).getValue();
    var FeedType = AttributeSets.getChild("FeedType", NS3).getValue();
    var SubmittedDate = AttributeSets.getChild("SubmittedDate", NS3).getValue();
    var FeedProcessingStatus = AttributeSets.getChild("FeedProcessingStatus", NS3).getValue();

    return 0;
}

外部からPOSTされた文字列に対するMD5ハッシュ値を呼出し元に返す関数は以下に記載。

上記の62行目の

1
var response = UrlFetchApp.fetch(url,option);</pre>

で呼ぶ

1
var url = 'https://getmd5hushed.herokuapp.com/';

このサイトのindex.phpが以下です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php

/* 外部からPOST呼出しされた場合の$_POST変数の取得方法 */
$request_body = file_get_contents('php://input');
/* 「$request_body」に対してデコードが必要な場合もある */

$xml=$request_body;
$data = array(
  'message' =&gt; base64_encode(md5($xml, true))
);
header('Content-Type: application/json');
echo json_encode($data);
?>

GASからのPOST変数(payload)を受けてMD5ハッシュ値を呼び出し元のGASに返します。

今日から実践で使える!Google アナリティクス講座

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

関連記事