API Verwendung

Einführung

Standardmäßig verwendet Shopware Dezimal Zahlen als Preise, während Klarna mit Cents und somit mit ganzen Zahlen arbeitet. Wir müssen dementsprechend die Shopware Preise in Cents umwandeln, bevor wir diese an Klarna übertragen.

Hierfür haben wir zwei Methoden, die hier aufgelistet werden.

PHP Kalkulation

{note} Kommazahlen können in PHP nicht 100%ig richtig dargestellt werden und führen somit immer wieder mal zu Rundungsproblemen.

Die erste Methode benutzt die Standard PHP Kalkulation.

Vorteile:

Nachteile:

BcMath Kalkulation

Die Methode verwendet die bcmath Extension. Diese arbeitet intern mit strings und nicht mit [Dezimalzahlen] (http://php.net/manual/de/language.types.float.php) und kann somit eine genauere Berechnung durchführen.

Vorteile:

Nachteile:

PHP Kalkulation erweitern

Um die PHP Kalkulation zu erweitern kann das Decorator Pattern verwendet werden.

<?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>