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>