API Verwendung

Einführung

Shopware speichert einen Modus für jede Position (eine interne Id), welche aussagt, was für ein Typ die Positionen haben. Klarna kennt diese interne Id nicht und somit müssen diese Modus so konvertiert werden, dass Klarna die Typen auch versteht.

Dazu haben wir für jeden Modus eine Converter Klasse erstellt, welche den 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 Dekorator 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>