Magento2: Quelle est la meilleure façon d'ajouter un champ de méthode de paiement personnalisé?

13

J'ai mis en place un nouveau mode de paiement dans Magento 2 avec un champ de méthode de paiement personnalisé (comme "po_number" de magento / offline-payment-methods ). Et le front-end fonctionne parfaitement bien (affichage du champ, validation, etc.).

Cependant, si je veux passer la commande Magento, la demande WebAPI génère l'erreur suivante:

"Propriété \" CustomField \ "n'a pas de setter correspondant dans la classe \" Magento \ Quote \ Api \ Data \ PaymentInterface \ ".

Il semble que Magento valide le champ personnalisé par rapport à l'interface de paiement principale où des méthodes telles que getPoNumber et setPoNumber sont définies.

J'ai déjà essayé d'ajouter le champ personnalisé via des attributs d'extension:

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

et créé l'interface avec les méthodes spécifiques:

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

Mais ça ne marche pas. Magento valide toujours par rapport à l'interface de paiement principale.

La question est maintenant de savoir comment faire en sorte que Magento accepte le champ du mode de paiement personnalisé? Tous les pointeurs sont très appréciés :)

therouv
la source
Je suis également intéressé, j'ai utilisé la même approche (extension_attributes) mais sans succès, puis j'ai abandonné l'idée et j'ai utilisé set / getAdditionalInformation ('custom_field') au lieu d'utiliser un champ personnalisé.
carco

Réponses:

3

Magento2 n'est pas bien architecturé ici. Ce que j'ai fait, c'est que je les ai transmis en date extension_attributesdu additional_data, puis que j'ai attribué ces informations dans la assignData()méthode afin qu'elles persistent. Plus tard, je récupère ces informations dans la capture()méthode et les utilise. Vous pouvez voir ici: Openpay PaymentMethod

awavi
la source