Amazon API - Versandupdate
Ich versuche über die Amazon API Trackingnummern für den Versand zu hinterlegen.
Bisher versuche ich das mit einem XML Template.
Grundsätzlich funktioniert der Code auch.
Allerdings scheint das XML Mist zu sein.
Amazon bietet auch die Möglichkeit ein CSV File zu übermitteln.
Jetzt habe ich mal gelernt, dass man Dateien als GET oder POST Feld übermittelt.
Das ist unten gelisteten Code offensichtlich nicht so.
Und ich muss zugeben, ganz verstanden habe ich nicht, was genau da passiert.
Die Übermittlung des CSV Files muss auf dem gleichen Weg möglich sein.
Die Frage ist jetzt, wie bekomme ich das Fiel in einen String gewandelt, den ich so übermitteln kann?
Danke schonmal für eure Antworten.
Bisher versuche ich das mit einem XML Template.
Grundsätzlich funktioniert der Code auch.
Allerdings scheint das XML Mist zu sein.
Amazon bietet auch die Möglichkeit ein CSV File zu übermitteln.
Jetzt habe ich mal gelernt, dass man Dateien als GET oder POST Feld übermittelt.
Das ist unten gelisteten Code offensichtlich nicht so.
Und ich muss zugeben, ganz verstanden habe ich nicht, was genau da passiert.
Die Übermittlung des CSV Files muss auf dem gleichen Weg möglich sein.
Die Frage ist jetzt, wie bekomme ich das Fiel in einen String gewandelt, den ich so übermitteln kann?
Danke schonmal für eure Antworten.
$param= array();
$param['AWSAccessKeyId'] = $amazonAWSAccessKeyId;
$param['Action'] = 'SubmitFeed';
$param['Merchant'] = $amazonSellerId;
$param['FeedType'] = '_POST_INVENTORY_AVAILABILITY_DATA_';
$param['SignatureMethod'] = 'HmacSHA256';
$param['SignatureVersion'] = '2';
$param['Timestamp'] = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z",time());
$param['Version'] = '2009-01-01';
$param['PurgeAndReplace'] = 'false';
$secret= $amazonSecretKey;
$url= array();
foreach ($paramas $key=> $val){
$key= str_replace("%7E","~",rawurlencode($key));
$val= str_replace("%7E","~",rawurlencode($val));
$url= "{$key}={$val}";
}
$amazon_feed= '<?xml version="1.0" encoding="UTF-8"?>
<AmazonEnvelope xsi:noNamespaceSchemaLocation="amzn-envelope.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>'.$amazonSellerId.'</MerchantIdentifier>
</Header>
<MessageType>OrderFulfillment</MessageType>
'.$xml.'
</AmazonEnvelope>';
sort($url);
$arr = implode('&',$url);
$sign = 'POST' . "\n";
$sign.= 'mws.amazonservices.de' . "\n";
$sign.= '/Feeds/'.$param['Version'].'' . "\n";
$sign.= $arr;
if(isset($_GET['DEBUG'])&& $_GET['DEBUG']== "1")echo $amazon_feed;
$signature = hash_hmac("sha256",$sign,$secret,true);
$httpHeader = array();
$httpHeader = 'Transfer-Encoding: chunked';
$httpHeader = 'Content-Type: application/xml';
$httpHeader = 'Content-MD5: ' . base64_encode(md5($amazon_feed,true));
//$httpHeader = 'x-amazon-user-agent: MyScriptName/1.0';
$httpHeader = 'Expect:';
$httpHeader = 'Accept:';
$signature = urlencode(base64_encode($signature));
$link = "https://mws.amazonservices.de/Feeds/".$param['Version']."?";
$link.= $arr. "&Signature=" . $signature;
if(!isset($_GET['DEBUG']))
{
$ch= curl_init($link);
curl_setopt($ch,CURLOPT_HTTPHEADER,$httpHeader);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$amazon_feed);
$response= curl_exec($ch);
$info= curl_getinfo($ch);
$errors=curl_error($ch);
curl_close($ch);
$resArr= explode("_",$response);
if(intval($resArr)> 0)
{
echo $resArr;
}else{
echo print_r($response);
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313804
Url: https://administrator.de/forum/amazon-api-versandupdate-313804.html
Ausgedruckt am: 10.04.2025 um 07:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
aktuell überträgt Dein Beispiel die Daten per POST mit CURL.
Hier kommt Dein Feed in die Variable $httpHeader
$httpHeader = 'Content-MD5: ' . base64_encode(md5($amazon_feed,true));
Hier wird diese Variable 2x an CURL übergeben
curl_setopt($ch,CURLOPT_HTTPHEADER,$httpHeader);
curl_setopt($ch,CURLOPT_POSTFIELDS,$amazon_feed);
CURL soll POST verwenden
curl_setopt($ch,CURLOPT_POST,1);
Und ab geht die Post
$response= curl_exec($ch);
aktuell überträgt Dein Beispiel die Daten per POST mit CURL.
Hier kommt Dein Feed in die Variable $httpHeader
$httpHeader = 'Content-MD5: ' . base64_encode(md5($amazon_feed,true));
Hier wird diese Variable 2x an CURL übergeben
curl_setopt($ch,CURLOPT_HTTPHEADER,$httpHeader);
curl_setopt($ch,CURLOPT_POSTFIELDS,$amazon_feed);
CURL soll POST verwenden
curl_setopt($ch,CURLOPT_POST,1);
Und ab geht die Post
$response= curl_exec($ch);

Hi.
not the content field!
You should the download the API Demos:
https://developer.amazonservices.de/doc/bde/feeds/v20090101/php.html
and follow the examples inside the zip file.
Reading is the first key to success!
Regards
Zitat von @WPFORGE:
Soweit war ich schon:
$httpHeader = 'Content-MD5: ' . base64_encode(md5($amazon_feed,true));
$amazon_feed wäre ja dann ein String.
Aber wie bekomme ich das csv File da rein? file_get_contents() wird nicht sein befürchte ich.
This is only the header-field with the hash of the file Soweit war ich schon:
$httpHeader = 'Content-MD5: ' . base64_encode(md5($amazon_feed,true));
$amazon_feed wäre ja dann ein String.
Aber wie bekomme ich das csv File da rein? file_get_contents() wird nicht sein befürchte ich.
You should the download the API Demos:
https://developer.amazonservices.de/doc/bde/feeds/v20090101/php.html
and follow the examples inside the zip file.
Reading is the first key to success!
Regards