Partnerprogramm bei 3.5.3.

[quote=“Stefan Hamann”]Moin, hmm - dann schick mir mal bitte die FTP + Backend + Datenbank-Zugangsdaten an forum@shopware.de, schaue dann mal rein.[/quote] Hi, ich hatte dir die Zugangsdaten gemailt - wie sieht es aus ? Konntest du irgendwas rausfinden ? Vg Jörg

Schickst du die bitte nochmal eben? Die sind nicht angekommen oder aber irgendwo im Spam-Filter hängen geblieben! Danke!

[quote=„Stefan Hamann“]Schickst du die bitte nochmal eben? Die sind nicht angekommen oder aber irgendwo im Spam-Filter hängen geblieben! Danke![/quote] Sind gerade noch mal raus - Absender office@valsatis.de Übrigens den Ansatz der gestern hier beschrieben wurde mit dem Umbenennen von GET in COOKIE funktioniert bei mir nicht ;-((

Sorry, ich hab die falsche Zeile geändert - das Thema mit GET gegen COOKIE tauschen funktioniert ! Und es war vermutlich eine Fehler im Coding. Vg Joerg

Hey, also, wir haben uns das nun angeschaut und konnten keinen Fehler feststellen: Aufruf über: http://www.deinshop.com/shopware.php?sPartner=test Die Testbestellung wurde erfolgreich erfasst - kannst du auch bei dir im Backend in den Auswertungen zum Partnermodul nachschauen - Bestellung Shopware vom 04.02.2011.

[quote=“Stefan Hamann”]Hey, also, wir haben uns das nun angeschaut und konnten keinen Fehler feststellen: Aufruf über: http://www.deinshop.com/shopware.php?sPartner=test Die Testbestellung wurde erfolgreich erfasst - kannst du auch bei dir im Backend in den Auswertungen zum Partnermodul nachschauen - Bestellung Shopware vom 04.02.2011.[/quote] Es funktioniert, weil ich die Bootstrap.php geändert habe - ändert ihr das jetzt im offiziellen Release ? So das es beim nächsten Update nicht erneut von mir geändert werden muss ? Vg Joerg

Was hast du denn da genau verändert?

[quote=“Patrick”] Habs nur kurz getestet, muss leider weg (Mittag :slight_smile: ) Zeile 135 folgendes $partner = Shopware()-\>Db()-\>fetchOne($sql, array($\_GET['sPartner'])); ersetzen durch: $partner = Shopware()-\>Db()-\>fetchOne($sql, array($\_COOKIE['sPartner'])); Jetzt wurde der Einkauf verbucht. das $_GET ist bei mir nur im ersten Aufruf vorhanden, auf der folgenden Seite sollte er dann den Tracking-Code aus dem Cookie nehmen. Ich hatte hier immer an Session gedacht, wär das nicht sicherer, falls Cookies ausgeschaltet sind? Beste Grüße, Patrick[/quote] Das hat er geändert. Wo ich grad hier bin. Bei mir funzt das auch noch nicht!

Bei mir geht das nach der Änderung in der Bootstrap.php Datei wunderbar ;-))) Patrick hat geschrieben:Habs nur kurz getestet, muss leider weg (Mittag ) Zeile 135 folgendes $partner = Shopware()->Db()->fetchOne(sql, array(_GET[‚sPartner‘])); ersetzen durch: $partner = Shopware()->Db()->fetchOne(sql, array(_COOKIE[‚sPartner‘]));

Das kann aber nicht das Problem sein! Beim ersten Aufruf werden gesetzt: Shopware()-\>Session()-\>sPartner = $\_GET['sPartner']; setcookie('sPartner', $\_GET['sPartner'], $valid); Bei allen nachfolgenden Aufrufen müsste er in die zweite If-Bedingung springen: elseif (isset($\_COOKIE['sPartner'])) In der Session wird das also direkt beim ersten Aufruf gespeichert und das ist entscheidend, für den Bestellabschluss und das Mapping der Bestellung. Ich vermute eher, dass der Key sPartner nicht 100 % mit dem Partnerkey aus der Datenbank übereinstimmt - z.B. spielt da ja Groß- und Kleinschreibung eine Rolle. Zum Testen kann man nach dem elseif unten die(Shopware()->Session()->sPartner); ergänzen - damit müsste beim zweiten Aufruf der Seite, ohne Get-Parameter, der Partnerkey ausgegeben werden - wenn der dort ausgegeben wird, funktionioniert die Zuweisung während der Bestellung 100 % auch. Das könntet ihr ggf. noch mal testen. Das Cookie wird für die Session überhaupt nicht benötigt - das ist nur dafür da, das bei nachfolgenden Besuchen, der dann generierte Umsatz auch dem Partner gutgeschrieben wird - also beim erstmaligen Aufruf ist das nicht relevant!

Versucht aber mal, das die() am Ende einzufügen. elseif (isset($\_COOKIE['sPartner'])) { $sql = 'SELECT idcode FROM s\_emarketing\_partner WHERE active=1 AND idcode=?'; $partner = Shopware()-\>Db()-\>fetchOne($sql, array($\_GET['sPartner'])); if(empty($partner)) unset(Shopware()-\>Session()-\>sPartner); else Shopware()-\>Session()-\>sPartner = $partner; if(isset(Shopware()-\>Session()-\>sPartner)) die("Session isset"); if(!isset(Shopware()-\>Session()-\>sPartner)) die("Session !isset"); } Auf der zweiten Seite ist Shopware()->Session()->sPartner leer, ich vermute weil $partner nicht gefüllt ist, weil es den GET ab der zweiten Seite nicht mehr gibt? Bzw. dieses Cookie/elseif ist insofern relevant, als dass dort die Session wieder aufgehoben wird :wink: Wenn es das GET nicht gibt, ist die DB-Abfrage leer. Dann ist partner leer. Dann wird die Session aufgehoben. Dann können auch keine Umsätze verbucht werden. Theoretisch könnte man doch array(_GET[‚sPartner‘]) durch Shopware()->Session()->sPartner austauschen?

Die Session selbst speichert ja auch Variablen über Requests hinweg - also das Cookie ist nur dafür da, den Partner auch nach erneutem Besuch des Shops wiederzufinden. Also ist es bei dir so, dass beim ersten Aufruf mit _GET der Parameter Shopware()->Session()->sPartner gesetzt ist und beim zweiten Aufruf nicht mehr? Wenn du den ersten Request ausführt (mit sPartner=…) und dann im zweiten Request einfach oben in der Adressleiste die Partner-Variable rausnimmst und noch mal lädst, dann ist die Session-Variable leer?? Das dürfte nicht passieren / kannst du das nochmal exakt so ausführen und die Ergebnisse einstellen?

Hi, mal kurz sammeln :wink: Was wollen wir denn erreichen !??!?! Im ersten Abschnitte der Funktion soll doch der Partner gesichert werden für weitere Aufrufe „ohne den Get-Parameter“ und das funktioniert auch, wenn man sich den Code ansieht. Im Bereich von „elseif (isset($_COOKIE[‚sPartner‘]))“ wollen wir doch den Wert wieder aus dem Cookie holen, damit nach einem guten Shopping die Provision richtig verbucht wird. Und dabei kann es nur sein wie Patrick es gestern beschrieben hat - in diesem Bereich hier den Wert vom Cookie für die Anfrage auf die Datenbank zu nutzen. und deshalb muss es nicht GET sondern COOKIE heissen. Wo sollte der Wert sonst herkommen können. $partner = Shopware()->Db()->fetchOne(sql, array(_COOKIE[‚sPartner‘])); Vg Joerg

Okay - da hatte ich dann wohl irgendwas im Auge :wink: Da habt ihr dann wohl Recht - der untere Teil benötigt definitiv _Cookie statt _Get … Beim ersten Besuch des Shops, sollte es aber ohne Anpassung problemlos gehen. Habe dafür ein Ticket in unserem Bug-Tracker aufgemacht, so dass das mit 3.5.4. behoben sein wird. (Schwere Geburt ;))

Habs gerade noch mal ausprobiert, der Inhalt der Shopware()->Session()->sPartner ist beim zweiten Aufruf, am Ende des elseif-Durchgangs leer. :slight_smile: (wenn man GET drin lässt.)

Hi, noch für dein Verständnis: Das klappte noch nicht mal beim ersten Besuch, da die GET Variable zwar bei dem ersten Seitenaufruf mit dem Parameter GET gesichert wird, aber dann während und nach dem Shopping nicht wieder aus dem Cookie geholt werden kann. Somit funktioniert das noch nicht mal: 1 mal ;-)) Vg Joerg

Okay, you´re right. Fix: Datei engine/Shopware/Plugins/Default/Frontend/Statistics/Bootstrap.php Funktion sRefreshPartner ersetzen mit: public function sRefreshPartner() { if (isset($\_GET['sPartner'])) { if (strpos($\_GET['sPartner'], 'sCampaign')===0) { $campaignID = (int) str\_replace('sCampaign', '', $\_GET['sPartner']); Shopware()-\>Session()-\>sPartner = 'sCampaign'.$campaignID; $sql = ' UPDATE s\_campaigns\_mailings SET clicked = clicked + 1 WHERE id = ? '; Shopware()-\>Db()-\>query($sql, array($campaignID)); } else { $sql = 'SELECT \* FROM s\_emarketing\_partner WHERE active=1 AND idcode=?'; $partner = Shopware()-\>Db()-\>fetchRow($sql, array($\_GET['sPartner'])); if(!empty($partner)) { if ($partner['cookielifetime']){ $valid = time() + $partner['cookielifetime']; } else { $valid = '0'; } setcookie('sPartner', $\_GET['sPartner'], $valid); } Shopware()-\>Session()-\>sPartner = $\_GET['sPartner']; } } elseif (isset($\_COOKIE['sPartner'])) { $sql = 'SELECT idcode FROM s\_emarketing\_partner WHERE active=1 AND idcode=?'; $partner = Shopware()-\>Db()-\>fetchOne($sql, array($\_COOKIE['sPartner'])); if(empty($partner)) unset(Shopware()-\>Session()-\>sPartner); else Shopware()-\>Session()-\>sPartner = $partner; } }

1 „Gefällt mir“

(Nur der Vollständigkeit halber - steht ja bereits eine Seite vorher)

Noch eine kleine Ergänzung :wink: Wenn man den Wert der Lifetime jetzt noch auf -1 setzen könnte und der Partner dann beim Kunden gespeichert würde, dann wäre es perfekt um alle zukünftigen Umsätze auf den Partner zu provisionieren ! Das wäre genial :wink: und dann wäre man für den Bereich auch nicht mehr vom Cookie abhängig. Vg Joerg

Öhm…ich kriege jetzt Parse error: syntax error, unexpected $end, expecting T\_FUNCTION in /www/htdocs/w00d321f/engine/Shopware/Plugins/Default/Frontend/Statistics/Bootstrap.php on line 140 ?!