Magento2: ¿Cuál es la mejor manera de agregar un campo de método de pago personalizado?


13

He configurado un nuevo método de pago en Magento 2 con un campo de método de pago personalizado (como "po_number" de magento / offline-payment- method ). Y el front end funciona perfectamente bien (campo que se muestra, validación, etc.).

Sin embargo, si quiero hacer el pedido de Magento, la solicitud de WebAPI arroja el siguiente error:

"Propiedad \" CustomField \ "no tiene el configurador correspondiente en la clase \" Magento \ Quote \ Api \ Data \ PaymentInterface \ ".

Parece que Magento valida el campo personalizado contra la interfaz de pago central donde se definen métodos como getPoNumber y setPoNumber .

Ya intenté agregar el campo personalizado a través de atributos de extensión:

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

y creó la interfaz con los métodos específicos:

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

Pero esto no funciona. Magento aún se valida contra la interfaz de pago principal.

La pregunta ahora es, ¿cómo hacer que Magento acepte el campo de método de pago personalizado? Cualquier puntero es muy apreciado :)


También estoy interesado, usé el mismo enfoque (extension_attributes) pero no tuve éxito, luego abandoné la idea y usé set / getAdditionalInformation ('custom_field') en lugar de usar un campo personalizado.
carco

Respuestas:


3

Magento2 no está bien arquitecturado aquí. Lo que hice fue pasarlos a partir extension_attributesde additional_dataentonces, luego asigné esa información en el assignData()método para que persista. Más tarde recupero dicha información en el capture()método y la uso. Puedes echar un vistazo aquí: Openpay PaymentMethod

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.