Magento2: Wie füge ich am besten ein benutzerdefiniertes Zahlungsmethodenfeld hinzu?

13

Ich habe in Magento 2 eine neue Zahlungsmethode mit einem benutzerdefinierten Zahlungsmethodenfeld eingerichtet (wie "po_number" von magento / offline-payment-methods ). Und das Front-End funktioniert einwandfrei (Feldanzeige, Validierung usw.).

Wenn ich jedoch die Bestellung für Magento aufgeben möchte, gibt die WebAPI-Anforderung den folgenden Fehler aus:

"Eigenschaft" CustomField "hat keinen entsprechenden Setter in der Klasse" Magento \ Quote \ Api \ Data \ PaymentInterface \ ".

Anscheinend überprüft Magento das benutzerdefinierte Feld anhand der zentralen Zahlungsschnittstelle, in der Methoden wie getPoNumber und setPoNumber definiert sind.

Ich habe bereits versucht, das benutzerdefinierte Feld über Erweiterungsattribute hinzuzufügen:

<extension_attributes for="Magento\Quote\Api\Data\PaymentInterface">
    <attribute code="custom_field" type="Vendor\Module\Api\Data\MethodInterface[]" />
</extension_attributes>

und erstellte die Schnittstelle mit den spezifischen Methoden:

<?php
namespace Vendor\Module\Api\Data;
use Magento\Framework\Api\ExtensibleDataInterface;
interface MethodInterface extends ExtensibleDataInterface
{
    public function setCustomField($customField);
    public function getCustomField();
}

Das geht aber nicht. Magento überprüft immer noch die Hauptzahlungsschnittstelle.

Die Frage ist nun, wie man Magento dazu bringt, das benutzerdefinierte Zahlungsmethodenfeld zu akzeptieren. Alle Hinweise sind sehr geschätzt :)

therouv
quelle
Ich bin auch interessiert, ich habe den gleichen Ansatz (extension_attributes) verwendet, aber keinen Erfolg. Dann habe ich die Idee fallen gelassen und set / getAdditionalInformation ('custom_field') verwendet, anstatt benutzerdefiniertes Feld zu verwenden.
Carco

Antworten:

3

Magento2 ist hier nicht gut aufgebaut. Was ich getan habe ist , ich sie übergeben , wie extension_attributesder additional_data, dann , dass die Informationen in der zugeordneten assignData()Verfahren , so dass es beharrte wird. Später rufe ich solche Informationen in der capture()Methode ab und verwende sie. Hier können Sie einen Blick darauf werfen : Openpay PaymentMethod

awavi
quelle