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 :)
la source
Réponses:
Magento2 n'est pas bien architecturé ici. Ce que j'ai fait, c'est que je les ai transmis en date
extension_attributes
duadditional_data
, puis que j'ai attribué ces informations dans laassignData()
méthode afin qu'elles persistent. Plus tard, je récupère ces informations dans lacapture()
méthode et les utilise. Vous pouvez voir ici: Openpay PaymentMethodla source