Modul Erweiterung

Das Modul bietet einige Möglichkeiten Anpassung an der Funktionalität vorzunehmen. Somit ist z.B. gewährleistet, dass spezifisch definierte Kunden- und/oder Adressattribute mit bei der Kontogenerierung beachtet werden.

Im Folgenden werden die frontend- und backendseitigen Anpassungen kurz erläutert:

Javascript

Um zusätzliche Kunden- und/oder Adressattribute (Daten) bei dem Api-Aufruf der Kundenregistrierung für den Checkout zu übergeben, sind folgende Registrierungen von JS-Mixins (in "requirejs-config.js") nötig:

  • place-order.js

  • register-on-checkout.js

    /** ******************
     * requirejs-config.js
     * **************** */
    var config = {
        map: {
            "*": {
            }
        },
        config: {
            mixins: {
                //same mixin to extend logic
                'Magento_Checkout/js/action/place-order': {
                    '<<MODULE>>/js/action/place-order-mixin': true
                },
                'TechDivision_CustomerCheckoutRegistration/js/action/register-on-checkout': {
                    '<<MODULE>/js/action/place-order-mixin': true
                },
                //maybe necessary for downstream processing
                'Magento_Checkout/js/action/set-payment-information': {
                    '<<MODULE>/js/action/set-payment-info-mixin': true
                },
            }
        }
    };

Die Implementierung würde beispielsweise so aussehen:

/** ******************
 * place-order-mixin.js
 * **************** */
define([
    'jquery',
    'mage/utils/wrapper'
], function ($, wrapper) {
    'use strict';

    return function (placeOrderAction) {

        /** Override default place order action and add agreement_ids to request */
        return wrapper.wrap(placeOrderAction, function (originalAction, paymentData, messageContainer) {

            /**  assign fields to payment data */
            if (paymentData['extension_attributes'] === undefined) {
                paymentData['extension_attributes'] = {};
            }
            paymentData['extension_attributes'][<<ATTRIBUTE-NAME>>] = <<ATTRIBUTE-VALUE>>;

            return originalAction(paymentData, messageContainer);
        });
    };
});

PHP

Die im Javascript übergebenen Daten werden im Standard-Magento-Funktionslauf in der Api-Funktion "savePaymentInformation" verarbeitet.

Um die übergebenen Daten für Kunden- oder Adressentitäten zu speichern, sind Plugins nötig, um die Attributswerte in Magento-Objekte zu speichern.

Hier eine Beispielimplementierung für die Erweiterung zum Speichern von Kundendaten.

<?xml version="1.0"?>
<!-- ****** -->
<!-- di.xml -->
<!-- ****** -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <!-- Register on Checkout Plugins -->
    <type name="TechDivision\CustomerCheckoutRegistration\Model\PaymentManagement">
        <plugin name="RegisterPaymentManagementPlugin" type="<<MODULE>>\Plugin\CheckoutRegisterManagementPlugin" sortOrder="10" />
    </type>
</config>
class CheckoutRegisterManagementPlugin
{
    /**
     * @param PaymentManagement $subject
     * @param Customer|CustomerInterface $result
     * @param $billingAddress
     * @param string $email
     * @param PaymentExtensionInterface $extensionAttributes
     * @return CustomerInterface|Customer
     */
    public function afterCreateCustomer($subject, $result, $billingAddress, $email, $extensionAttributes)
    {
        try {
            $attr = $extensionAttributes->get<<ATTRIBUTE-NAME>>();
            //or maybe: $attr = $extensionAttributes->getData(<<ATTRIBUTE-NAME>>);
            $result->set<<ATTRIBUTE-NAME>>($attr);
        } catch (\Exception $e) {
        }
        return $result;
    }
}

XML

Es ist notwendig das zu speichernde Attribut als "Extension-Attribute" der "PaymentData" zu definieren.

Die wird über die "extension_attributes.xml" Datei sichergestellt.

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Quote\Api\Data\PaymentInterface">
        <attribute code="<<ATTRIBUTE-NAME>>" type="<<TYPE (eg. string)>>" />
    </extension_attributes>
</config>