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>