Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Automatisches Bestandsupdate von externen Shop’s
 
joe1860
Jr. Member
 
Total Posts:  5
Joined:  2009-02-26
 

Hallo liebes Forum,

wir beabsichtigen in nicht allzuferner Zeit einen Online-Shop mit Magento zu realisieren.
Da unsere Lagerkapazität speziell jetzt am Anfang ( Kapitalbindung, Lagerflächen anmieten ) begrenzt sind,
möchten wir gerne auf das Lager unseres Großhändlers zurückgreifen.

Unser Großhändler bietet uns hierbei an, diese Daten täglich über XML ( XML over HTTP (REST) ) von seinem Shop auszulesen.
Hierzu habe ich ein Attribut Org.Nr. angelegt. Da sich die Artikel nicht grundsätzlich ändern, habe ich in Magento bereits über die Export-Funktion eine Datei ( Artikel.xml ) erstellt.

Wie schaffe ich es nun, dass

1. Die Daten beim Lieferanten ausgelesen werden
2. Die Daten in Magento Importiert werden
3. Das ganze per Cron-Job abläuft

Syntax für den Browser:
http://b2b.test.de/xml/?loginid=xxx&password;=xxx&processtype;=itemdetails&itemnumber;=543126565&itemnumber;=76324178234

Hier müsste &itemnumber;=123456789 ersetzt werden durch die jeweilige Artikelnummer.

Bin für jeden Vorschlag dankbar.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hallo,

ich würde das über die api machen und wie folgt vorgehen:

1. Über api Produktlisting über alles Produkte auslesen
2. Über eine foreach Anweisung jeweils den Lagerbestand via HTTP auslesen und über die api zurückschreiben.

Das ganze natürlich als Cron-Job grin

Die Doku zur API für Produkte gibt es hier: http://www.magentocommerce.com/wiki/doc/webservices-api/api/catalog_product

Viele Grüße
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hallo,

ich habe mal ein Beispiel erstellt wie man automatische Bestand-Updates realisieren könnte.
Da ich keine Infos über die externe Schnittstelle habe, benutze ich ein Script, welches mir
Zufallszahlen als Lagerbestand zurückliefert.

Datei: getStock.php

<?php
  mt_srand
((double)microtime()*1000000);  
  if (
$_POST['sku'!= ''{
    
echo mt_rand(01000);  
  
else {
    
echo 'ERROR';  
  
}   
?>

Die Lagerbstände kann man via HTTP-Request von externen Seiten beziehen. Die Datei mit der Funktion PostRequest($url, $referer, $_data) befindet sich im Anhang. Hier nun die PHP-Datei für das automatische Ändern der Lagerbestände und des Bestellstatus.

Datei: update_stock.php

<?php
  
require 'fn_post.php'// Funktion für HTTP-Request
  
  // Template für die Ausgabe 
  
$template '<div style="background-color:#%s;font-family:Verdana;font-size:11px;margin-bottom:4px;padding:2px;">';
  
$template .= '<div style="float:left;width:150px;">Position:</div><div>%s</div>';
  
$template .= '<div style="float:left;width:150px;">Produkt-ID:</div><div>%s</div>';  
  
$template .= '<div style="float:left;width:150px;">Artikelnummer:</div><div>%s</div>';  
  
$template .= '<div style="float:left;width:150px;">alter Lagerbestand:</div><div>%s</div>';  
  
$template .= '<div style="float:left;width:150px;">neuer Lagerbestand:</div><div>%s</div>';  
  
$template .= '<div style="float:left;width:150px;">Lieferbar alt:</div><div>%s</div>';  
  
$template .= '<div style="float:left;width:150px;">Lieferbar neu:</div><div>%s</div>';  
  
$template .= '</div';  

  
$proxy = new SoapClient('http://domain.de/api/soap/?wsdl'); // Ã„NDERN
  
$sessionId $proxy->login('apiUser''apiKey'); // Ã„NDERN
  
  // Produktliste auslesen     
  
$products $proxy->call($sessionId'product.list');

  
$i 0;  
  foreach (
$products as $product{
    $products_id 
$product['product_id'];
    
$sku $product['sku'];    
    
$i++;
    
$data = array('sku' => $sku);
    
    
// Lagerbestand extern via HTTP-Request einholen
    
list($header$content) = PostRequest("http://seifert.tmedia-shop.de/getStock.php","http://seifert.tmedia-shop.de",$data);
    
$stock $content;

    
// Wenn Bestand > 0 Lieferbar, sonst nicht    
    
if ($stock 0{ $in_stock 1else { $in_stock 0}

    
// auslesen des alten Lagerbestandes
    
$old_stock = ($proxy->call($sessionId'product_stock.list'$products_id));
    
// Neuer Lagerbestand und Lieferstatus schreiben
    
$proxy->call($sessionId'product_stock.update', array($products_id, array('qty'=>$stock'is_in_stock'=>$in_stock)));    
     
    
// alternierende Farben für die Ausgabe
    
if ($i == 0{ $color 'DDD'else { $color 'AAA'}
    
// Werte ausgeben
    
printf($template,$color,$i,$products_id,$sku,$old_stock[0]['qty'],$stock,$old_stock[0]['is_in_stock'],$in_stock);
    
flush;  
  
}
?>

Den Sourcecode habe ich dokumentiert und ich hoffe das ist selbsterklärend. Falls nicht - einfach eine PM an mich senden.

Um die API zu benutzen muss man im Backend zuerst einen Webservice erstellen.
Folgende Zeilen müssen dann im Sourcecode noch angepasst werden:
$proxy = new SoapClient(‘http://domain.de/api/soap/?wsdl‘); // ÄNDERN
$sessionId = $proxy->login(’apiUser‘, ’apiKey‘); // ÄNDERN

Die Ausgabe und das Einlesen des alten Betsandes kann man natürlich weglassen. Ich würde da ein Log-File erstellen
oder einen Mailer mit Reporting erstellen.

Viele Grüße
Dscho

Image Attachments
screen.jpg
File Attachments
fn_post.php  (File Size: 2KB - Downloads: 85)
getStock.php  (File Size: 1KB - Downloads: 82)
update_stock.php  (File Size: 3KB - Downloads: 78)
 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top