Produkt zum Warenkorb hinzufügen

Hallo,

ich versuche gerade für die Community Edition eine Schnittstelle zu bauen die die Basisfunktionen zur Verfügung stellt. Das Ganze wird dann über Webservices aufgerufen (SOAP, AMF etc.). Login klappt auch schon problemlos. Einige andere Sachen auch. Nun hänge ich aber beim hinzufügen von Artikeln zum Warenkorb fest.

Ich hohle über oxSession den warenkorb und füge dann mit der addToCart Methode mein Produkt hinzu. Danach führe ich noch oxSession::getInstance()->freeze();.

Prinzipiell funktioniert das auch. Das Produkt wird dem Warenkorb hinzugefügt, wenn ich nun allerdings noch ein Produkt hinzufüge, ist das vorher hinzugefügte verschwunden. Scheinbar wurde ein neuer Warenkorb generiert. Wenn ich jetzt aber über das normale Userinterface ein Produkt hinzufüge, funktioniert danach auch mein selbstgeschriebener Service wie er soll. Kann es mir einfach nicht erklären.

Hat vielleicht jemand eine Idee?

Der Login ist so geregelt und funktioniert:

public function loginUser($user, $pass )

{

    $userItems = array();

    $oUser = oxNew( 'oxUser' );



    if($oUser->login($user,$pass, true))

    {

        foreach ($oUser as $key=>$value)

        {

            $userItems[$this->parseKey($key)] = $value->rawValue;

        }

    }

    return $userItems;

}

Hallo,

sicher, dass Du über den Aufruf der oxSession nicht jedes mal eine neue Session generierst?

Gruß


Marco Steinhäuser
Community Guide
OXID eSales AG
http://twitter.com/marcosteinhaeus

also, die Session hohle ich mir so:

$oBasket = oxSession::getInstance()->getBasket();

Eigentlich habe ich vermutet/gehofft das ich was bei dem Login falsch mache und die Session nicht richtig initialisiert wird.

Es funktioniert ja sobald ich einmal etwas über die normale oxid oberfläche eingefügt habe bestens. Deshalb habe ich darauf getippt das der Warenkorb nicht richtig initialisiert wird oder so…

Hier mal meine Funktion. Eigentlich trivial:

$oBasket = oxSession::getInstance()->getBasket();

$oBasket->addToBasket($productId, 1, null, null, null, null, null, null, null);

oxSession::getInstance()->freeze();

Ich habe unzählige verschiedene Dinge ausprobiert.

Hallo dumdidum,

wenn du einen Webservice ala SOAP o.ä. planst muss ich zuerst sagen: SUPER! Wollte auch schon sowas basteln, aber ohne konkrete Anwendung hat sowas ja immer sehr geringe Priorität. Als zweites ich helfe nur wenn du das Ergebnis Open Source machst … :stuck_out_tongue: ne Scherz bei Seite!

Erhlich gesagt kann ich mir nicht vorstellen das dein Login so schon funktioniert. DENN der Shop mach Standartgemäß alles über Cookie-bases Sessions. Wenn du aber einen Webservice via RPC o.ä. anbieten willst wirst du auf cookies verzichten müssen und mit einer Session Id arbeiten. Deswegen klappen deine Aktionen wohl auch wenn du mit dem Browser arbeitest, aber der Sinn von einem Webservice ist ja gerade nicht mit dem Browser darauf zu greifen.

Einer der ersten Schritte der in deinem Script ablaufen müsste wäre ein “blSessionUseCookies” (config wert) auf alse zu setzen. Danach kannst du dann mit dem Parameter “sid” arbeiten (solltest du zumindest mal versuchen)

Ausserdem verstehe ich im Moment nicht ganz was das hier macht:

foreach ($oUser as $key=>$value)

        {

            $userItems[$this->parseKey($key)] = $value->rawValue;

        }

    }

Grüße

Mathias

Also, bisher soll das ganze eine AMF Anbindung werden. Glücklicherweise kann Flash Cookies und schickt die gesetzten auch brav zurück an den Server. Hier sollte also kein Problem sein :-). Wenn meine Probleme gelöst sind, ist es sicher sehr wenig Aufwand die Session ID in die URL zu verfrachten und SOAP oder XML-RPC zu realisieren.

Ich bin allerdings noch völlig Ratlos.

@MaFi

Deinem Post entnehme ich, dass ich nicht deutlich geschrieben habe. Also sobald ich einmal über die normale Weboberfläche von oxid einen Artikel in den Warenkorb lege, funktioniert es danach auhc über die Services. Flash benutzt hier die normalen Browser Cookies. Wenn ich mich über den AMF Service einlogge, bin ich auch in der normalen Oberfläche eingeloggt.

Mein Problem habe ich