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 2 of 2
Einrichtung | Anpassung | Nutzen der API in Magento
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

das problem wird sein das die session auf dem magento-server gecached wird. wenn ihr den proxy auf null setzt dann geht es, zumindest bei mir.
mann muss sich dann eine neue session holen

grüße

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

Hallo timste,

ich denke das ist es noch nicht ganz die Lösung.
Wenn ich schreibe:

// Beende session
$proxy->endSession($sessionId);

// Lösche Objekt
$proxy NULL;

// Lösche Referenz
unset($proxy);

Kann ich mit:

$proxy = new SoapClient('http://192.168.1.51/magento/api/?wsdl');
$tierPrices2 $proxy->call($sessionId'product_tier_price.info''TKw002');

das Array wieder abfragen!
Die Session ist also noch irgendwo verfügbar!
Oder habe ich jetzt einen Denkfehler?

Gruß
Sören

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

hm, komisch.

ich mache es genau so wie du und wenn ich wieder auf den proxy zugreife passiert nix?!?

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

Hi,

der Gedanke ist doch der, dass man eine Session erzeugen kann und diese offen bleibt,
bis diese wieder geschlossen wird oder ein Session Timeout eintritt.

In meinem Fall habe ich eine PHP-Klasse mit diversen Funktionen die von extern ausgeführt
werden.

Beispiel:
1. [shop-url]/meinscript.php?action=login&user;=api_user&key;=api_key
(Wird über eine Client-Software via POST aufgerufen. GET hier nur zur Anschauung)
2. Clientanwendung speichert Session
3. [shop-url]/meinscript.php?action=categories_tree&session;=api_session
4. Clientanwendung verarbeitet Output und stellt Artikelgruppen dar
5. [shop-url]/meinscript.php?action=logout&session;=api_session
Nun sollte die Session dann nicht mehr erreichbar ein

Wie gesagt ist die Session aber immer noch erreichbar. 

Ich glaube wir sollten einen eigenen Topc erstellen.

Grüße
Dscho

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

können wir gerne machen und details besprechen wink sag mir bescheid

gruss

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

Kann wer einen neuen Topic machen und alle relevanten Beiträge kopieren?

Gruß
Dscho

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

Hallo Dscho,

das hätte ich mir auch so gedacht!
Eigentlich ist es mir persönlich auch egal, ob die Session per Kommando geschlossen wird oder irgendwann vom “timeout”!
Nun bin ich aber auch kein Sicherheitsexperte und weiß nicht, wie “unsicher” die offene Session im Cache ist.
Im Prinzip sollte die “alte” Session aber nicht den Betrieb stören?! Oder?

Fakt ist: Wenn jemand, wie auch immer, an die Session-ID kommt, kann er für den Moment, wo die Session offen bleibt alles machen was die Rechte hergeben.

BTW: Ist es Euch schon gelungen die Benutzerrechte vom API-User einzuschränken?
Wenn ich die Rechte versuche zu reduzieren, dann kann ich micht gar nicht erst authentifizieren!

Gruß
Sören

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 
sfp77 - 25 February 2009 01:59 AM

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

Das finde ich aber nett, dass ich einen Geduldsbonus erworben habe. Ist nicht meine Absicht, diesen auch auszunutzen, versprochen.
Aber vielen Dank für das positive Feedback. Ich tuhe was ich kann, aber ich freue mich sehr das es umgedreht genau so klappt, also wenn ich mich mal bei etwas glatt anstelle.  grin

Es nähert sich anscheinend dem Ziel
Ich bekomme jetzt schon einmal eine XML-Datei - ist das richtig so bzw. ist das dieser client? siehe Anhang
Funktioniert hat es mit diesem Aufruf:

http://localhost/index.php/api/soap/index/wsdl/1

Was aber noch überhaupt garnicht funktioniert ist der Aufruf der Datei. Bekomme immer Parse Error on Line 2 also die Adresse.
Habe es sogar 3 mal überprüft ob der Pfad dahin stimmt, daran kann es also nicht liegen.

Eine Frage stellt sich aber generell noch, zwar peinlich aber ich frage jetzt trotzdem.
Ich höre hier andauernd “einen Call absetzen”, damit ist doch der Aufruf meiner Datei und somit die Ausführung des Scripts gemeint oder?

Danke für die Datei + Info. Ich fand diese Kurzschreibweise sogar übersichtlicher.  grin

LG - Daniel

File Attachments
soap-aufruf.xml  (File Size: 9KB - Downloads: 58)
 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hi,

hast Du mal die Beispiele aus der Magento api angesehen?
http://www.magentocommerce.com/support/magento_core_api

In der api gibt es grundlegene Funktionen. Unter anderem die Funktion call.
Mit call kann man die einzelnen Bereiche der api ansprechen. Der Vorgang ist im Prinzip immer gleich.

1. Soap Client initialisieren
2. Session mit login erzeugen
3. Funktion mit call aufrufen
4. Daten verarbeiten
5. Session löschen

Beispiel Kundenliste auslesen:

$proxy = new SoapClient('http://magentohost/api/soap/?wsdl');
$sessionId $proxy->login('apiUser''apiKey');
 
// Kundenliste ausgeben "Call"
var_dump($proxy->call($sessionId'customer.list'));

$proxy->endSession($sessionid);

Ich hoffe das ist was Du suchst. Die einzelnen Übergabeparameter, Rückgabewerte sowie weitere Beispiele findet Du in der Doku zur api.

Gruß
Dscho

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

Danke Dscho für die Info,
also ist es wie in deinem Beispiel (pro Aufruf einer Datei den gewünschten bzw. die gewünschten calls tätigen).

Genau das wollte ich in meinem vorherigen Post wissen, habe nämlich in vielen Beispielen viele calls in einer Datei gesehen und war daher etwas verwirrt.

Ich gehe davon aus das wenn da nun in einer Datei mehrere Dinge stehen, diese dann nacheinander ausgeführt werden.

LG - Daniel

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

Hi,

je nachdem was Du mit Deiner PHP-Datei durchführen möchtest
kannst Du natürlich auch mehrere Call’s ausführen.

Hier mal der Beginn meiner Klasse:

<?php
/*************************************************************
   MAGClient Â©2009 by TMEDIA, Doris Teitge-Seifert
   Developer: Johannes Teitge
   Version: 1.0
   Date: 02-25-2009
*************************************************************/

// const definitions
define('FN_LOGIN'1);
define('FN_LOGOUT'2);
define('FN_CATEGORIES_LIST'3);
define('FN_CATEGORY_DATA'4);


class 
magclient
{
  
var $client;   
  var 
$user '';
  var 
$key '';
  var 
$session '';
  var 
$debug false;
  
  
  
// constructor: creates the sopa client with url. For Example: 'http://youmagentohost/api/?wsdl'
  
function __construct($url,$session='',$debug=false{
    $this
->client = new SoapClient($url);
    
$this->debug $debug;
    if (
$session != ''{
      $this
->session $session;
    
}    
    
if ($this->debug{
      $this
->output_debug('__construct(Session):',$this->session); 
    
}
  }
  
  
// destructor: close session  
  
function __destruct() {
    
if ($this->client{
//      $this->client->endSession($this->session);  
    
}        
  } 
  

  
function output_debug($title,$content,$error=''{
    $content 
str_replace("\t"'&nbsp;&nbsp;&nbsp;',$content);
    echo 
'<div style="width: 100%; background-color:#cecece; padding:4px; font-family: Verdana; font-size: 14px;">';
    echo 
'<b>'.$title.'</b>'.$content;        
    echo 
"</div>";    
  
}
  
  
function prepare_xml($section,$content,$title='Magento-Client'
    $output 
'<?xml version="1.0" encoding="windows-1252"?'.">\n";
   
    
$output .= "<".$title.">\n";        
    
$output .= "\t<".$section.">\n";        
    
$output .= $content;    
    
$output .= "\t</".$section.">\n";    
    
$output .= "</".$title.">\n";
    
    return 
$output;    
  
}
  
  
  
  
function login($User,$Key{
    
if ($this->client{
      $session 
$this->client->login($User,$Key);
      if (
$session{
        $this
->session $session;
        
$this->user $User;        
        
$this->key $Key;
        
        if (
$this->debug{
          $this
->output_debug('login(Session):',$this->session);        
          
$this->output_debug('login(User):',$this->user); 
          
$this->output_debug('login(Key):',$this->key);          
        
}                        
      }         
    }    
  }
  
  
function logout() {
    
if ($this->client{
      
if ($this->client->endSession($this->session)) {
        
if ($this->debug{ $this->output_debug('LOGOUT:','OK'); }      
      } 
else {
        
if ($this->debug{ $this->output_debug('LOGOUT:','Error: Can not logout'); }      
      }  
       
    }    
  }
  
  
  
private function getCat($categories,$catxml=''{
    $element 
'';        
    foreach(
$categories as $key => $value{
      
if (is_array($value) == true{
        
if (trim($element != '')) {
          $catxml 
.= "\t\t<Category>\n" $element "\t\t</Category>\n";  
        
}
        $catxml 
$this->getCat($value,$catxml);        
      
else {
        $element 
.= "\t\t\t<".$key.'>'.utf8_decode($value)."</".$key.">\n";      
      
}            
    } 
    
return $catxml;                            
  
}
      
  
  
function categories_list() {
    
if (($this->client) && ($this->session != '')) {    
      $categories 
$this->client->call($this->session'catalog_category.tree');
      
$list $this->getCat($categories);
      
$output $this->prepare_xml('categories',$list);
      if (
$this->debug{
        $this
->output_debug('Categories XML:','<br>'.nl2br(htmlentities($output)));     
      
else {         
        
echo $output;
      
}      
    }    
  }
  
  
  
function category_data($id{
    
if (($this->client) && ($this->session != '')) {   
      $category 
$this->client->call($this->session'catalog_category.info',$id);
//      var_dump($category);      
      
if (count($category) > 0{
        $output 
''
        foreach (
$category as $key => $value{
          $output 
.= "\t\t<".$key.'>'.utf8_decode($value)."</".$key.">\n";        
        
}      
        $output 
$this->prepare_xml('category',$output);
        if (
$this->debug{
          $this
->output_debug('Categories XML:','<br>'.nl2br(htmlentities($output)));     
        
else {         
          
echo $output;
        
}     
      }         
    }  
  }
    

}



// Main Routine
if ($_GET['magurl']{
  $magurl 
$_GET['magurl'];
  
$user $_GET['user'];
  
$key $_GET['key'];
  
$session $_GET['session'];
  
$act $_GET['act'];
  
$debug $_GET['debug'];
  
$id $_GET['id'];
else {  
  $magurl 
$_POST['magurl'];
  
$user $_POST['user'];
  
$key $_POST['key'];
  
$session $_POST['session'];
  
$act $_POST['act'];
  
$debug $_POST['debug'];
  
$id $_POST['id'];
}  

if ($magurl != ''{
  $mage 
= new magclient($magurl,$session,$debug==1);

  if (
$mage{
  
    
switch ($act{
      
// Login
      
case FN_LOGIN:
        
$mage->login($user,$key);         
        if (
$mage->debug!=true{        
          
echo $mage->session;
        
}          
      
break;
    
      
// Logout    
      
case FN_LOGOUT:
        if (
$session != ''{
          $mage
->logout();
        
}   
      
break;
      
      
// Output Categories List    
      
case FN_CATEGORIES_LIST:
        if (
$mage->session != ''{
          $mage
->categories_list();
        
}   
      
break;
      
      
// Output Categories List    
      
case FN_CATEGORY_DATA
        if ((
$mage->session != '') && ($id != '')) {
          $mage
->category_data($id);
        
}   
      
break;
      
    
}
  }
    
else {
  
echo 'Error: ';
}

?>

Viele Grüße
Dscho

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

@Daniel

“Parse Error” ist in der Regel auf einen Syntaxfehler zurückzuführen!
Füge dem nächsten Beitrag doch mal bitte Deine PHP-Datei bei.
Dann können wir uns die mal anschaun.

Die WSDL-URL sieht zwar merkwürdig aus, führt beim Aufruf bei meinem Server aber auch zur WS-XML Datei.
Sollte also eigentlich auch damit funktionieren.

Beste Grüße,
Sören

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

Es läuft!

Nachdem ich mir das heute noch einmal angesehen habe und alle Domainrelevanten Dinge in Magento von localhost auf 127.0.0.1 gesetzt habe + entsprechende Anpassungen in meinen Dummy-Dateien kam nun eine Ausgabe.

Für einen Artikel wo 3 Preisstaffeln hinterlegt waren erhielt ich die korrekte Ausgabe - sicher nicht umbedingt hübsch aber wie ich auch schon anhand von verschiedenen Beispielen usw. gesehen habe kann man auch da noch etwas tun wenn man möchte.

Auf jeden Fall macht es jetzt Sinn mich damit zu beschäftigen. Werde nun versuchen mal so weit wie irgend möglich allein klar zu kommen.

Wer weiß, vieleicht poste ich ja auch mal solche langen Killer-Scripts hier.

grin Vielen Dank an alle

Liebe Grüße - Daniel

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