Amasty Affiliate: Attributionsverlust bei Gutscheincodes beheben
Wer Amasty Affiliate für seinen Magento-Shop nutzt, sollte sich diesen Bug ansehen.
Das Szenario: Ein Kunde klickt auf einen Affiliate-Link, der Cookie wird gesetzt, der Kunde stöbert im Shop, legt Artikel in den Warenkorb und löst dann einen normalen Gutscheincode ein. Er schließt die Bestellung ab. Der Affiliate bekommt keine Provision.
Der Affiliate hat seinen Job gemacht. Er hat den Kunden in den Shop gebracht. Aber weil der Kunde einen Gutscheincode verwendet hat, geht die Attribution ohne Warnung verloren.
Warum das passiert
In AffiliateQuoteResolver::resolveAffiliateAccount() verwendet Amasty eine Prioritätskette:
- Prüfen, ob das Quote einen Gutscheincode hat, und diesen in der Affiliate-Gutscheintabelle nachschlagen
- Wenn der Gutschein kein Affiliate-Gutschein ist,
NoSuchEntityExceptionwerfen und null zurückgeben - Nur wenn überhaupt kein Gutschein vorhanden ist, den Affiliate-Cookie prüfen
Schritt 2 unterbricht die gesamte Methode. Sobald irgendein Nicht-Affiliate-Gutschein vorhanden ist, wird der Cookie nie geprüft. Affiliate-Regeln werden bei der Warenkorb-Berechnung nicht angewendet. Der SalesOrderAfterPlaceObserver findet kein Affiliate-Konto. Kein Transaction-Eintrag wird erstellt. Attribution verloren.
Die Lösung
Das Modul verwendet zwei Plugins.
Das erste ist ein after-Plugin auf resolveAffiliateAccount(), das den Affiliate-Cookie prüft, wenn die ursprüngliche Methode null zurückgibt. Einfach und ohne Nebeneffekte.
Das zweite behandelt den Fall, dass sowohl ein Affiliate-Rabatt als auch ein Gutschein-Rabatt auf dasselbe Produkt zutreffen. Statt sie zu stapeln, erhält der Kunde den größeren der beiden Rabatte:
| Szenario | Ergebnis |
|---|---|
| Nur Affiliate | Voller Affiliate-Rabatt |
| Nur Gutschein | Voller Gutschein-Rabatt |
| Beide, Affiliate größer | Affiliate-Rabatt bleibt, Gutschein entfernt |
| Beide, Gutschein größer | Gutschein bleibt, Affiliate-Rabatt entfernt |
| Beide + automatische Regel | max(Affiliate, Gutschein) + automatische Regel läuft normal |
Affiliates bekommen Provision. Die Marge ist geschützt. Rabatte stapeln sich nicht.
Installation
composer require pixelperfectat/magento2-module-amasty-affiliate-attribution-fix
bin/magento module:enable PixelPerfect_AmastyAffiliateAttributionFix
bin/magento setup:upgrade
Nach der Installation ist keine weitere Konfiguration notwendig.
Lohnt sich die Prüfung
Wer Amasty Affiliate betreibt und in seinem Shop Gutscheincodes verwendet, sollte die amasty_affiliate_transaction-Tabelle mit den tatsächlichen Bestellungen abgleichen. Die Anzahl fehlender Attributionen kann überraschend sein.
Das Modul ist kompatibel mit PHP 8.3+, Magento 2.4.x und Amasty Affiliate 2.3.0+. Das GitHub-Repository ist hier. Wer Hilfe mit dem Affiliate-Setup braucht, kann mich gerne kontaktieren.