Order Management
Zuletzt bearbeitet am: 08.03.2024
Einführung
Das Order Management ist Teil von beiden Plugins: Klarna Payments und Klarna Checkout. Das Modul Order Management bündelt Bestandteile die von beiden Plugins benötigt werden: die Handhabung von Klarna Bestellungen innerhalb des Shopware Backends.
Verwendung und Bedienung
Klarna Tab in der Bestellung
Im Klarna Tab in den Bestelldetails finden Sie neben einer Übersicht der Klarna-Bestellungen diverse Aktionen.
Der Tab Klarna. wird nur für Bestellungen angezeigt die mit einer Klarna Zahlungsart bezahlt wurden.
Name | Beschreibung |
---|---|
Gesamtbetrag | Der Gesamtbetrag der Bestellung. |
Erfasster Betrag | Der Betrag, welcher bereits erfasst (abgebucht) wurde. |
Erstatteter Betrag | Der Betrag, welcher erstattet wurde. |
Verbleibender Betrag | Der Betrag, welcher noch erfasst werden kann (noch nicht abgebuchter Betrag). |
Klarna Referenz | Eine Klarna interne ID zur Identifizierung der Bestellung. |
Klarna Status | Der Bestellstatus, der bei Klarna hinterlegt ist. |
Betrugs-Risiko | Der Klarna Risiko Check Status. |
Läuft ab am | An dem Datum läuft die Autorisierung ab. Ab dem Zeitpunkt kann der verbleibende Betrag nicht mehr erfasst werden. |
Betrag manuell erfassen
Sie können einen Betrag erfassen indem, Sie auf den "Betrag erfassen" Button klicken. Es wird Ihnen nun ein neues Fenster angezeigt, indem Sie den Betrag, die Positionen und einen Kommentar festlegen können.
Die Auswahl der Positionen ist optional, Sie können auch einen Betrag manuell eingeben. In diesem Fall erhält Klarna allerdings nicht die Information, welche Positionen bereits erfasst wurden. Daher empfehlen wir stets, die Erfassung über die Positionsauswahl durchzuführen.
Der Kommentar ist ebenfalls optional und dient Ihnen zur Verdeutlichung, wieso ein Betrag erfasst wurde. Zum Beispiel: "Position XY wurde nicht erfasst, weil diese nicht mehr auf Lager war."
Sobald Sie die gewünschten Positionen und den gewünschten`Betrag ausgewählt haben, können Sie den Betrag erfassen, indem Sie auf "Betrag erfassen" klicken.
Sie werden nun abgefragt, ob Sie die Erfassung durchführen möchten.
Bestätigen Sie die Aktion, indem Sie auf den "Vorgehen" Button klicken. Im Fehler- und Erfolgsfall wird Ihnen eine entsprechende Meldung angezeigt.
Betrag manuell rückerstatten
Sie können einen Betrag rückerstatten, indem Sie auf den "Betrag rückerstatten" Button klicken. Es wird Ihnen nun ein neues Fenster angezeigt, indem Sie den Betrag, die Positionen und einen Kommentar festlegen können.
Die Auswahl der Positionen ist optional, Sie können auch einen Betrag manuell eingeben. In diesem Fall erhält Klarna allerdings nicht die Information, welche Positionen erstattet wurden. Daher empfehlen wir stets, die Rückerstattung über die Positionsauswahl durchzuführen.
Der Kommentar ist ebenfalls optional und dient Ihnen zur Verdeutlichung, wieso ein Betrag erstattet wurde. Zum Beispiel: "Position XY wurde erstattet, weil diese nicht mehr auf Lager war."
Sobald Sie die gewünschten Positionen und den gewünschten Betrag ausgewählt haben, können Sie den Betrag erstatten, indem Sie auf "Betrag rückerstatten" klicken.
Sie werden nun abgefragt, ob Sie die Erstattung durchführen möchten.
Bestätigen Sie die Aktion, indem Sie auf den "Vorgehen" Button klicken. Im Fehler- und Erfolgsfall wird Ihnen eine entsprechende Meldung angezeigt.
Autorisierung manuell verlängern
Sie können die Autorisierung einer Zahlung verlängern, indem Sie auf den "Authorisierung verlängern" Link klicken.
Sie werden nun abgefragt, ob Sie die Autorisierung wirklich verlängern möchten.
Bestätigen Sie die Aktion, indem Sie auf den "Vorgehen" Button klicken. Im Fehler- und Erfolgsfall wird Ihnen eine entsprechende Meldung angezeigt.
Verbleibenden Betrag manuell freigeben
Sie können den verbleibenden Betrag freigeben (Autorisierung aufheben), in dem Sie auf den "Freigeben" Link klicken.
Sie werden nun abgefragt, ob Sie den verbleibenen Betrag wirklich freigeben möchten.
Bestätigen Sie die Aktion, indem Sie auf den "Freigeben" Button klicken. Im Fehler- und Erfolgsfall wird Ihnen eine entsprechende Meldung angezeigt.
Rechnung manuell erneut senden
Sie können eine Rechnung je erfassten Betrag erneut senden.
Um eine Übersicht aller erfassten Beträge zu erhalten, klicken Sie auf den Details
Link.
Sie sehen nun eine Übersicht aller erfassten Beträge und je erfassten Betrag einen Button "Rechnung erneut senden". Wenn Sie für einen erfassten Betrag die Rechnung erneut senden möchten, klicken Sie den "Rechnung erneut senden" Button unter dem erfassten Betrag.
Sie werden nun abgefragt, ob Sie die Rechnung wirklich erneut senden möchten.
Bestätigen Sie die Aktion, indem Sie auf den "Proceed" Button klicken. Im Fehler- und Erfolgsfall wird Ihnen eine entsprechende Meldung angezeigt.
Bestellhistorie
Die Bestellhistorie listet alle Aktionen auf, welche für die Bestellung durchgeführt wurden.
Spalte | Beschreibung |
---|---|
# | Die Spalte sagt aus, ob die Aktion erfolgreich war oder nicht. Ein grünes Häkchen sagt aus, dass die Aktion erfolgreich war. Ein rotes X sagt aus, dass die Aktion fehlgeschlagen ist. |
Zeitpunkt | Der Zeitpunkt an dem die Aktion durchgeführt wurde. |
Meldung | Die Aktion, welche durchgeführt wurde. |
Details | Ein Link welcher ein Dialog mit mehr Informationen öffnet. |
Folgende Meldungen können auftreten:
Meldung | Beschreibung/Informationen |
---|---|
Es wurde ein Betrag erfasst. | Welcher Betrag erfasst wurde sieht man im "Details" Dialog. |
Es wurde ein Betrag erstattet. | Welcher Betrag erstattet wurde sieht man im "Details" Dialog. |
Bestelldetails wurden geupdated. | Die Bestellung wurde aktualisiert. Zum Beispiel wurde eine Position entfernt. |
Der Autorisierungszeitraum wurde verlängert. | Wird ausgeführt, wenn man den "Autorisierung verlängern" Link innerhalb des Klarna Tab klickt. |
Der verbleibende Betrag wurde freigegeben. | Der restliche (noch nicht erfasste Betrag) wurde freigegeben und kann somit nicht mehr erfasst werden. |
Bestellung wurde abgebrochen. | Die Bestellung wurde bei Klarna storniert und kann nicht mehr erfasst werden. |
Beispiel eines Dialogs mit weiteren Informationen zu einer Aktion.
Bestellung manuell stornieren
Eine Bestellung kann nur storniert werden, wenn noch kein Betrag erfasst wurde.
Die Stornierung einer Bestellung kann nicht rückgängig gemacht werden.
Um eine Bestellung zu stornieren, klicken Sie den "Bestellung stornieren" Button.
Sie werden nun abgefragt, ob Sie die Bestellung wirklich stornieren möchten.
Bestätigen Sie die Aktion, indem Sie auf den "Vorgehen" Button klicken. Im Fehler- und Erfolgsfall wird Ihnen eine entsprechende Meldung angezeigt.
Sobald eine Bestellung storniert ist, können keine weiteren Aktionen mit dieser Bestellung durchgeführt werden.
Automatische Änderungen
Durch definierte Änderungen an einer Bestellung werden automatisch Aktionen bei Klarna ausgelöst.
Zahlungsstatus
Der Zahlungsstatus wird bei bestimmten Aktionen automatisch von Klarna gesetzt.
Aktion | Zahlungsstatus |
---|---|
Teilerfassung | Teilweise bezahlt |
Teilrückerstattung | Wiedergutschrift |
Volle Erfassung | Komplett bezahlt |
Volle Rückerstattung | Wiedergutschrift |
Änderungen an den Adressen
Bei Adressänderungen einer Bestellung im Backend werden die neuen Daten zuerst an Klarna übertragen. Nur wenn Klarna die neue Adresse akzeptiert, wird diese in Shopware aktualisiert. So wird sichergestellt, dass die neue Adresse durch den Klarna Risikocheck akzeptiert wurde.
Bitte beachten Sie, dass eine Änderung von Klarna nicht akzeptiert wird, sobald ein Betrag der Bestellung erfasst wurde.
Änderungen an der Bestellung
Bei Änderungen an einer Bestellung (bspw. Positionen) werden die neuen Daten zuerst an Klarna übertragen. Nur wenn Klarna die neue Bestellung akzeptiert, wird diese in Shopware aktualisiert. So wird sichergestellt, dass die neuen Daten durch den Klarna Risikocheck akzeptiert wurden.
Änderungen, die den autorisierten Betrag erhöhen, werden generell abgelehnt.
Bitte beachten Sie, dass eine Änderung von Klarna nicht akzeptiert wird, sobald ein Betrag der Bestellung erfasst wurde.
Sendungsnummer
Bei der Änderung der Sendungsnummer wird diese an Klarna übertragen. Für mehrere Sendungsnummern beachten Sie bitte die jeweilige Plugin-Konfiguration zum Trennzeichen von Sendungsnummern.
Die Sendungsnummer wird bei Erfassungen automatisch an Klarna übermittelt.
Zahlungsart ändern
Das Ändern der Zahlungsart von einer Klarna Zahlungsart zu einer anderen Zahlungsart kann nur ausgeführt werden, wenn noch kein Betrag erfasst wurde. In diesem Fall wird die Bestellung bei Klarna automatisch storniert.
Die Zahlungsart kann nicht von einer Klarna Zahlungsart zu einer anderen Klarna Zahlungsart verändert werden.
Bestellung löschen
Eine Bestellung kann nur gelöscht werden, wenn noch kein Betrag erfasst wurde. In dem Fall wird die Bestellung bei Klarna automatisch storniert.
Plugin erweitern
Die Komponenten des Order Management sind so entwickelt, dass diese nicht nur von beiden Klarna Plugins, sondern auch von Ihrem individuellen Plugin verwendet werden können. Für die leichtere Ansteuerung haben wir sogenannte "Facaden" bereitgestellt.
Teilweise benötigen die Komponenten die Klarna-Order-Id. Diese wird als Transaktions-Id einer Bestellung in Shopware gespeichert.
Facaden
Bestellung abrufen
Um eine Bestellung abzurufen, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Order
Facade.
Über diese können Sie die get
Methode aufrufen, welche eine Bestellung von Klarna abruft.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Order as OrderFacade;
class Example
{
/** @var OrderFacade */
protected $orderFacade;
public function __construct(OrderFacade $orderFacade)
{
$this->orderFacade = $orderFacade;
}
public function example()
{
$klarnaResponse = $this->orderFacade->get('klarna-order-id');
}
}
Betrag erfassen
Um einen Betrag zu erfassen, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Capture
Facade.
Über diese können Sie die create
Methode aufrufen, welche einen Betrag erfasst.
Sie können der Methode auch die Positionen als JSON, einen Kommentar und Versandinformationen mitgeben.
Das Positions JSON muss so formatiert werden, dass es in ein array von BestitKlarnaOrderManagement\Components\Api\Model\LineItem
deserialisiert werden kann.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Capture as CaptureFacade;
class Example
{
/** @var CaptureFacade */
protected $captureFacade;
public function __construct(CaptureFacade $captureFacade)
{
$this->captureFacade = $captureFacade;
}
public function example()
{
$betragInCents = 500;
$klarnaResponse = $this->captureFacade->create('klarna-order-id', $betragInCents);
}
}
Betrag rückerstatten
Um einen Betrag zu erstatten, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Refund
Facade.
Über diese können Sie die create
Methode aufrufen, welche einen Betrag erstattet.
Sie können der Methode die Positionen als JSON)und einen Kommentar mitgeben.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Refund as RefundFacade;
class Example
{
/** @var RefundFacade */
protected $refundFacade;
public function __construct(RefundFacade $refundFacade)
{
$this->refundFacade = $refundFacade;
}
public function example()
{
$betragInCents = 500;
$klarnaResponse = $this->refundFacade->create('klarna-order-id', $betragInCents);
}
}
Bestellung aktualisieren
Um eine Bestellung zu aktualisieren, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Order
Facade.
Über diese können Sie die updateOrder
Methode aufrufen, welche eine Bestellung aktualisiert.
Diese Methode benötigt die Klarna-Order-Id, den neuen Gesamtbetrag der Bestellung und ein Array von BestitKlarnaOrderManagement\Components\Api\Model\LineItem
mit allen Positionen.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Api\Model\LineItem;
use BestitKlarnaOrderManagement\Components\Api\Model\ProductIdentifiers;
use BestitKlarnaOrderManagement\Components\Constants;
use BestitKlarnaOrderManagement\Components\Facade\Order as OrderFacade;
class Example
{
/** @var OrderFacade */
protected $orderFacade;
public function __construct(OrderFacade $orderFacade)
{
$this->orderFacade = $orderFacade;
}
public function example()
{
$lineItem = new LineItem();
$lineItem->type = Constants::KLARNA_LINE_ITEM_TYPE_PHYSICAL;
$lineItem->totalTaxAmount = 0;
$lineItem->totalAmount = 0;
$lineItem->quantity = 1;
$lineItem->name = 'Free article';
$lineItem->productIdentifiers = new ProductIdentifiers(); // ProductIdentifiers are blank intentionally
$lineItem->taxRate = 0;
$lineItem->totalDiscountAmount = 0;
$lineItem->unitPrice = 0;
$lineItem->quantityUnit = 'Pieces';
$lineItem->reference = 'SW1000';
$klarnaResponse = $this->orderFacade->updateOrder('klarna-order-id', 0, [$lineItem]);
}
}
Autorisierung verlängern
Um eine Autorisierung zu verlängern, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Order
Facade.
Über diese können Sie die extendAuthTime
Methode aufrufen, welche eine Autorisierung verlängert.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Order as OrderFacade;
class Example
{
/** @var OrderFacade */
protected $orderFacade;
public function __construct(OrderFacade $orderFacade)
{
$this->orderFacade = $orderFacade;
}
public function example()
{
$klarnaResponse = $this->orderFacade->extendAuthTime('klarna-order-id');
}
}
Verbleibenden Betrag freigeben
Um den verbleibenden Betrag freizugeben, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Order
Facade.
Über diese können Sie die releaseRemainingAmount
Methode aufrufen, welche den verbleibenden Betrag freigibt.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Order as OrderFacade;
class Example
{
/** @var OrderFacade */
protected $orderFacade;
public function __construct(OrderFacade $orderFacade)
{
$this->orderFacade = $orderFacade;
}
public function example()
{
$klarnaResponse = $this->orderFacade->releaseRemainingAmount('klarna-order-id');
}
}
Rechnung erneut senden
Um eine Rechnung erneut zu senden, benötigen Sie die BestitKlarnaOrdferManagement\Components\Facade\Capture
Facade.
Über diese können Sie die resend
Methode aufrufen, welche die Rechnung erneut sendet.
Da eine Rechnung per erfassten Betrag erstellt wird, kann auch nur für einen bestimmten erfassten Betrag eine Rechnung erneut versendet werden.
Hierzu wird die Capture Id
benötigt, welche bei dem Bestellabruf mitgeliefert wird.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Capture as CaptureFacade;
class Example
{
/** @var CaptureFacade */
protected $captureFacade;
public function __construct(CaptureFacade $captureFacade)
{
$this->captureFacade = $captureFacade;
}
public function example()
{
$klarnaResponse = $this->captureFacade->resend('klarna-order-id', 'capture-id');
}
}
Bestellung stornieren
Um eine Bestellung zu stornieren, benötigen Sie die BestitKlarnaOrderManagement\Components\Facade\Order
Facade.
Über diese können Sie die cancel
Methode aufrufen, welche die Bestellung storniert.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Facade\Order as OrderFacade;
class Example
{
/** @var OrderFacade */
protected $orderFacade;
public function __construct(OrderFacade $orderFacade)
{
$this->orderFacade = $orderFacade;
}
public function example()
{
$klarnaResponse = $this->orderFacade->cancel('klarna-order-id');
}
}
Cent Kalkulation
Standardmäßig verwendet Shopware Dezimalzahlen als Preise (bspw "3,14"), während Klarna mit Cents und somit mit ganzen Zahlen (bspw. "314") arbeitet. Daher müssen die Shopware Preise entsprechend in Cents umgewandlet werden, bevor diese an Klarna übertragen werden können.
Bitte beachten Sie, dass die Konfiguration Netto-Bestellungen konsequent auf 2 Stellen runden
(unter Einstellungen -> Grundeinstellungen -> Storefront -> Warenkorb / Artikeldetails
) zu Rundungsfehlern führen kann. Wir empfehlen, diese Option auf dem Standard "Ja" zu speichern.
PHP Kalkulation
Mit der Standard PHP Kalkulation sind keine Erweiterungen notwendig. Allerdings können hierbei Rundungsfehler auftreten.
BcMath Kalkulation
Alternativ kann die PHP Erweiterung bcmath auf dem Server installiert werden. Aufgrund der internen Verarbeitung treten hierbei weniger Rundungsfehler auf.
Eigene Kalkulation
Mit dem Decorator Pattern kann die PHP Kalkulation überschrieben bzw. erweitert werden, um eine eigene Kalkulation zu ergänzen.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Calculator\CalculatorInterface;
class Example implements CalculatorInterface
{
/** @var CalculatorInterface */
protected $decoratedCalculator;
public function __construct(CalculatorInterface $decoratedCalculator)
{
$this->decoratedCalculator = $decoratedCalculator;
}
public function isSupported()
{
return $this->decoratedCalculator->isSupported();
}
public function toCents($amount)
{
return $amount * 100;
}
public function toMajorUnit($amount)
{
return $this->decoratedCalculator->toMajorUnit($amount);
}
}
In der service.xml
muss dann der neue Service als Dekorator markiert werden:
<service
class="App\Example\Example"
id="app.example.example"
decorates="bestit_klarna_order_management.components.calculator.php_calculator">
<argument type="service" id="app.example.example.inner"/>
</service>
Positionsmodus
Shopware speichert einen Modus für jede Position, eine Art interne Id, für die Differenzierung des Positions-Typ (bspw. Artikel, Rabatt oder Gutschein). Klarna kennt diese internen Identifikationen nicht und müssen somit für Klarna in verständliche Typen konvertiert werden.
Dazu haben wir für jeden Modus eine Converter
Klasse erstellt, welche den Shopware Modus zu einem Klarna Typ konvertieren.
Alle Converter
müssen das BestitKlarnaOrderManagement\Components\Converter\ModeInterface
implementieren.
Converter modifizieren
In dem Beispiel wird der Converter
des Modus "2" (Shopware Rabattgutschein) modifiziert, sodass dieser immer den Typ gift_card
zurück gibt.
<?php
namespace App\Example;
use BestitKlarnaOrderManagement\Components\Constants;
use BestitKlarnaOrderManagement\Components\Converter\ModeInterface;
use BestitKlarnaOrderManagement\Components\Exception\NoSupportedModeException;
class Example implements ModeInterface
{
/** @var ModeInterface */
protected $decoratedConverter;
public function __construct(ModeInterface $decoratedConverter)
{
$this->decoratedConverter = $decoratedConverter;
}
public function isSupported($mode)
{
return $this->decoratedConverter->isSupported($mode);
}
public function convert($mode, $price = null)
{
if (!$this->isSupported($mode)) {
throw new NoSupportedModeException();
}
return Constants::KLARNA_LINE_ITEM_TYPE_GIFT_CARD;
}
}
In der service.xml
muss dann der neue Service als Decorator markiert werden:
<service
class="App\Example\Example"
id="app.example.example"
decorates="bestit_klarna_order_management.components.converter.voucher">
<argument type="service" id="app.example.example.inner"/>
</service>
Sonstiges
Automatische Klarna Aktionen
Durch Änderungen des Bestellstatus können automatische Aktionen durch das Plugin durchgeführt werden. Sehen Sie hierfür auch die Plugin-Konfiguration.
Die automatischen Aktionen können nur vom Plugin durchgeführt werden, wenn die Aktualisierung der Bestellung über das Doctrine ORM gespeichert wird. Direkte Änderungen in der Datenbank können aus technischen Gründen nicht berücksichtigt werden.
Automatische Erfassung
Wenn sich der Bestellstatus auf den konfigurierten Bestellstatus ändert, wird eine volle Erfassung automatisch ausgeführt.
Automatische Rückerstattung
Wenn sich der Bestellstatus auf den konfigurierten Bestellstatus ändert, wird eine volle Rückerstattung automatisch ausgeführt.