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

Page 1 of 2
Einrichtung | Anpassung | Nutzen der API in Magento
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Hallo liebe Gemeinde,
ich bin vor kurzem auf das Thema API aufmerksam geworden und komme was das angeht nun etwas ins stocken, ich benötige daher eure Hilfe was das angeht.

Hier habe ich mir die ersten Infos dazu besorgt. Unter 3. gibt es dann eine Anleitung wie man seine eigene API baut.

1. Frage: Sollen die erstellten Dateien eigentlich bestimmte Namen bekommen. (api.xml habe ich ja) aber was ist mit dem PHP Teil? Also welche Dateinamen bekommen dieses “Resource Model” + dieser “custom adapter” ???
Oder bin ich an der Stelle schon auf dem falschen Weg?

2. Frage: Besteht die Möglichkeit auch die unter der Ãœbersicht aufgeführten “Cor API Calls” zu kombinieren?
Die Frage stellt sich da ich konkret versuche einen Produktimport / Export mit Staffelpreisen also “Mage Product Tier Price API” zu realisieren.

3. Frage: Wie richte ich so etwas überhaupt ein? Habe zwar auch schon etwas von Soap Clients gehört aber wie läuft das genau?

Würde mich sehr freuen wenn einige bzw. alle Fragen beantwortet werden können!
Links, Erfahrungsbereichte, Erklärungen, Tipps oder auch gerne Codebeispiele (egal wie komplex) sind ausdrücklich erwünscht.

wink Danke im Voraus und liebe Grüße - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
sfp77
Member
 
Total Posts:  71
Joined:  2008-11-29
 

Hallo Daniel,

vorneweg, ich habe mich selbst bisher wenig mit der magento api beschäftigt.
Aber warum willst Du eine eigene API erstellen?
Reichen die von magento zur Verfügung gestellten API-Calls für Dein Vorhaben nicht aus?

Gruß

Sören

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Bin mir nicht sicher ob wir das Gleiche meinen. Mit API-Calls meinst du doch so etwas wie “price.info” oder? In dem Fall meine ich das und das würde reichen.

Wenn du allerdings die normalen Import / Export Profile + die Möglichkeit sich diese selbst anzupassen meinst dann lautet die Antwort Nein.
Diese ermöglichen leider nicht, Staffelpreise zu importieren / exportieren.

Daher will ich da jetzt per API ran und habe noch nicht so recht eine Vorstellung wie ich das zu Stande bringen soll.  confused

Liebe Grüße - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
sfp77
Member
 
Total Posts:  71
Joined:  2008-11-29
 

Hi Daniel,

genau diese API-Calls meine ich auch.
Mich hatte nur verwundert, dass Du gleich auf den Punkt 3. “Create your own API” verwiesen hast.
Das brauchst Du erst, wenn Dir die API-Calls der Magento-API nicht mehr ausreichen und Du eigene Methoden implementieren willst.
Sprich die Magento-API um Funktionen erweitern willst, die so nicht angeboten werden.

Wenn Du mit der Standart-API zurecht kommst, dann reicht es:

1.) im Backend unter “system” -> “web services” eine neue Gruppe mit Berechtigungen und einen WebService User einzurichten!
2.) dann dieser Anleitung folgen: http://www.magentocommerce.com/wiki/doc/webservices-api/introduction

mit $client = new SoapClient(’http://DeineSeite.de/api/?wsdl’); // erzeugst Du einen neuen SOAP-Klienten
mit $sessionID = $client->login(’apiUser’, ‘apiKey’); // holst Du Dir eine SessionID und authentifizierst denn Benutzer aus Punkt 1.

Danach kannst Du mit dem entsprechenden SOAP-Call die gewünschten Methoden aufrufen und die Rückgabewerte verarbeiten.
z.B.:
// View all customers
var_dump($client->call($sessionID, ‘customer.list’));

Ich hoffe das hilft Dir?

Viele Grüße,

Sören

 
Magento Community Magento Community
Magento Community
Magento Community
 
sfp77
Member
 
Total Posts:  71
Joined:  2008-11-29
 

Nachtrag:

Das ganze schreibst Du in irgend eine eigene PHP-Datei und rufst diese von Deinem Server auf.

z.B.: www.DeinServer.de/DeineAPICalls/holeKunden.php

gruß

Sören

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

@daniel

ich hatte dir dazu auch schon mal den passenden codeschnipsel gepostet.
Lies dich mal in die API-Calls ein die SFP77 meint.
Ausprobieren und wenn du dann Fragen hast fragen.

Gruß

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Danke für die Infos, auch an timste. Ich weiß das du mir das kürzlich schon einmal an anderer Stelle gepostet hast.  wink

So langsam kommt Licht ins dunkle. Dieses Thema API ist also nichts tolles großes neues sondern lediglich eine Ergänzung zu den mitgelieferten Funktionalitäten.

Somit ist auch diese Seite mit den vielen Calls nix neues, großes sondern einfach nur eine Offenlegung der Technologie und wie diese gehandhabt wird, für die jenigen die mehr oder in anderen Kombinationen wollen.

Hab mich schon voll gewundert, dass ich in ein Paar Verzeichnissen drin war und da jeweils schon so eine api.xml drin lag.  wink
Und ich hielt das für das Allheilmittel…

Könnte mir trotzdem jemand sagen ob ich da an die Staffelpreise rankomme und zwar so das ich sie da rein und raus bekomme?

Von den Methoden stehen in der Tier Price API nur die folgenden (auf dieser Seite da)

1. catalog_product_attribute_tier_price.info - Retrieve product tier prices - auf deutsch etwa abrufen / abfragen / wiederfinden
Ist das der Export?

2. catalog_product_attribute_tier_price.update - Update product tier prices - aktualisieren - Ist das dann der Import oder wie?

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
sfp77
Member
 
Total Posts:  71
Joined:  2008-11-29
 

Hi Daniel,

wie man es sieht! wink
Ich finde schon, dass die Möglichkeit, die Magento bietet, sich seine eigene API zu schreiben etwas “großes, neues, tolles” ist, wenn man Zeit und Lust hat sich da einzuarbeiten.
Ansonsten, versteht man eine API auch eher als Schnittstelle von aussen auf eine “BlackBox”.
Stell Dir einen Zugriff vom Intranet einer Firma (Windows-System mit ASP) auf den Internet-Server (Linux-System mit PHP) vor.
Ohne API mit Webservices ala SOAP oder XML-RPC eine ganz verflixte Sache.
Ich habe vor kurzem ein Projekt gehabt, wo ich auf eine, in Visual Basic geschriebene, Anwendung auf einem ASP-Server per SOAP-Schnittstelle zugegriffen habe.
Das Webfrontend konnte ich wie gewohnt in PHP schreiben, da meine ASP-Kentnisse nicht sonderlich doll sind.
Da lernt man Webservices erst richtig schätzen! wink

zu 1.) Exportiere, hole, zeige an (wie man es auch nennen will) “tier prices” mit: product_tier_price.info

$tierPrices = $proxy->call($sessionId, ‘product_tier_price.info’, ‘Sku’);
// erfordert Angabe der “SKU”

siehe: http://www.magentocommerce.com/wiki/doc/webservices-api/api/catalog_product_attribute_tier_price#catalog_product_attribute_tier_price.info

zu 2.) Importiere, update, trage ein (wie auch immer) “tier prices” mit: product_tier_price.update

$proxy->call($sessionId, ‘product_tier_price.update’, array(’Sku’, $tierPrices));

// erfordert die Angabe des Arrays $tierPrices

siehe: http://www.magentocommerce.com/wiki/doc/webservices-api/api/catalog_product_attribute_tier_price#catalog_product_attribute_tier_price.update

Ist in der Dokumentation eigentlich ganz gut erklärt.
Ansonsten, einfach die entsprechenden Code-Schnippsel aus der Doku ausprobieren und mit “var_dump” die Ausgabe beobachten.
So kommt man meißt am schnellsten auf den Dreh.

Gruß

Sören

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Danke für die Info! Schätze ich nähere mich einem Ergebnis. Finde es aber schon mal toll das die 2 Calls in Tier Prices wirklich für In und Export verwendet werden.

Also irgendwie scheint es bei mir schon beim Aufruf zu scheitern.  smirk

Habe mir so eine Datei gebastelt, diese auch abgelegt, Im Backend habe ich auch diesen Nutzer angelegt und die Werte entsprechend in die Datei eingetragen.

Das liegt im Magento Ordner unter “meinecalls/staffelpreise.php”

Kann es sein das die Geschichte auf localhost garnicht funktioniert?

Wenn es unter localhost doch funktioniertt, dann bitte mal wenn möglich euren Dateiaufbau anhand des Beispiels mit den Staffelpreisen & Domain localhost posten. Ich vermute da liegt der Wurzel allen Übels begraben.

Das Beste was zur Zeit kommt ist ein PARSE ERROR on Line 2 (Da wird nur die Domain aufgerufen) In Zeile 1 ist das öffnende php Tag.

Wenn ich diese PHP Tag weg lasse bekomme ich nur die nackte Datei geliefert.

Kann es denn so schwer sein? (Merke schon das ich eure Gedult auf eine harte Probe stelle)

Liebe Grüße
Daniel

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

Hallo Daniel,

wir entwickeln sei Jahren Clientsoftware für Onlineshops. (Beispiel: http://www.oscommerce-admin.de/index.php?id=42)

Nun möchten all unsere Kunden die auf Magento umsteigen auf unsere Software nicht verzichten. Aus diesem Grund habe ich angefangen mich mit der API zu beschäftigen. Leider machen in einigen Hochsprachen die assoziativen Arrays (Arrays mit nicht numerischen Indizes) Probleme. Ob c#, c++ oder Delphi - ich habe es nicht richtig zum “Laufen gebracht”.

Ausweg - entweder meine eigene API oder eine PHP-Klasse die als Schnittstele zur API-Dient. Ich habe dies nun mal mit dem
Einlesen und Bearbeiten von Artikelgruppen über eine eigene PHP-Klasse getestet. Das funktioniert recht gut und die Perfromance
ist erstaunlicherweise auch ok.

Also ich finde die API super, da man sich aufwändige Datenbankabfragen ersparen kann und man sich in das Datenbankmanagement nicht komplett einarbeiten muss.

Viele Grüße
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
sfp77
Member
 
Total Posts:  71
Joined:  2008-11-29
 

@Dscho
Ich finde auch, dass die Rückgabe als Array etwas unglücklich ist.
Bei anderen - konformen - SOAP Implementationen die ich kenne, ist das besser, über XML-Strings, gelöst.
Ich finde Eure Software sehr interessant und hätte gerne eine Demo-Version, wenn Eure Schnittstelle fertig ist?!
Geht dass?

@Daniel
Ich habe mal überlegt, ob “localhost” ein Problem sein kann. Mir ist aber kein Grund eingefallen, warum dass so sein sollte!
Anbei mal eine Beispiel-Datei aus der Doku! Mit “localhost” in der WSDL-URL kann ich es nicht testen.
Aber mit lokaler IP im LAN funktioniert es ohne Probleme.

<?php
    $proxy 
= new SoapClient('http://192.168.1.51/magento/api/?wsdl');
    
$sessionId $proxy->login('apiuser''apiuser');

    
// View all customers
    // var_dump($client->call($sessionID, 'customer.list'));
    

// Get tier prices
  
$tierPrices $proxy->call($sessionId'product_tier_price.info''TKw002');
  
var_dump($tierPrices);

// Add new

  
$tierPrices[] = array(
    
'website'           => 'all',
    
'customer_group_id' => 'all',
    
'qty'               => 68,
    
'price'             => 18.20
  
);

// Update tier prices
  
$proxy->call($sessionId'product_tier_price.update', array('TKw002'$tierPrices));

// Compare values
  
var_dump($proxy->call($sessionId'product_tier_price.info''TKw002'));
  
var_dump($tierPrices); 

?>

Die Ausgabe, etwas gekürzt, sieht bei mir dann so aus:

[3]=>
  array(
4{
    [
"website"]=>
    
string(3"all"
    
["customer_group_id"]=>
    
string(3"all"
    
["qty"]=>
    
int(68)
    
["price"]=>
    
float(18.2)
  
}

Ich hoffe es hilft!

btw:
Ich finde den Support den Du anderen Benutzern hier im Forum bietest ganz hervorragend.
Mit einer Gelassenheit schreibst Du seitenweise Texte, dass ist schon beeindruckend.
Mach weiter so! Das hilft mir und vielen Anderen.
Insofern habe ich mit Dir auch noch “etwas” Geduld. wink

Gruß Sören

Image Attachments
staffel-vorher.jpgstaffel.jpg
File Attachments
staffelpreise.php  (File Size: 1KB - Downloads: 77)
 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hi,

wenn ihr schon “am basteln” mit der api seid grin - mir ist etwas aufgefallen
bin mir aber nicht sicher ob das nur bei mir ist.

Wenn ich mich anmeldet habe bekomme ich ja eine session-ID. Mit dieser kann
ich dann arbeiten und dabie auch andere php-scripte aufrufen, die diese Session-ID
nutzen. Wenn ich nun mit endSession die Session schließe, kann ich trotzdem
noch auf die Funktion mittels der geschlossen Session-ID zugreifen.

Wenn das bei Euch auch der Falls sein sollte ist das sicherlich ein Bug in der API
und nicht im Sinne der Entwickler. Dies sollten wir dann als Bug melden.
Könnt Ihr das bei Euch auch mal nachprüfen.

Viele Grüße
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

wie beendest du denn deine session der API?

Gruss

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

Hallo Sören,

klar, wenn wir eine Beta haben, stelle ich diese gerne zur Verfügung. Im Moment mache ich aber noch erste Tests und entwickle meine PHP-Klasse um die Kommunikation zwischen Client-Anwendung und Magento hinzubekommen. Ich bin erst beim einlesen der Artikelgruppen siehe Screenshot.

Also das wird schon noch eine Weile dauern bis daraus ein richtige Anwendung wird. Nebenbei muss man ja auch noch Geld verdienen und kann nicht nur Entwicklungsarbeit leisten grin

Viele Grüße
Dscho

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

Die Session beende ich mit

function logout() {
    
if ($this->client{
      
if ($this->client->[b]endSession($this->session)[/b]{
        
if ($this->debug{ $this->output_debug('LOGOUT:','OK'); }      
      } 
else {
        
if ($this->debug{ $this->output_debug('LOGOUT:','Error: Can not logout'); }      
      }         
    }    
  }

Ich bekomme von der API true als Rückgabewert. Trotzdem kann man mit der
Session weiterarbeiten.

Gruß
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
sfp77
Member
 
Total Posts:  71
Joined:  2008-11-29
 

@Dscho

Hmm! Das kann ich bestätigen.
Ein “var_dump($proxy->endSession($sessionId));” gibt “TRUE” zurück aber die Session funktioniert immer noch. (getestet mit 1.1.8 und deaktiviertem Cache).

gruß
Sören

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top
Page 1 of 2