Magento2: Qual é a melhor maneira de adicionar um campo de método de pagamento personalizado?


13

Configurei um novo método de pagamento no Magento 2 com um campo personalizado de método de pagamento (como "po_number" de magento / offline-payment-methods ). E o front end está funcionando perfeitamente (campo aparecendo, validação etc.).

No entanto, se eu quiser fazer o pedido Magento, a solicitação WebAPI lança o seguinte erro:

"Propriedade" "CustomField \" não possui setter correspondente na classe \ "Magento \ Quote \ Api \ Data \ PaymentInterface \".

Parece que o Magento valida o campo personalizado na interface principal de pagamento, na qual métodos como getPoNumber e setPoNumber são definidos.

Eu já tentei adicionar o campo personalizado via atributos de extensão:

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

e criou a interface com os 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();
}

Mas isso não funciona. O Magento ainda valida na interface principal de pagamento.

A questão agora é: como fazer com que o Magento aceite o campo de método de pagamento personalizado? Todos os ponteiros são muito apreciados :)


Também estou interessado, usei a mesma abordagem (extension_attributes), mas não obtive sucesso. Depois, larguei a ideia e usei set / getAdditionalInformation ('custom_field') em vez de usar o campo personalizado.
carco

Respostas:


3

O Magento2 não é bem arquitetado aqui. O que fiz foi passar essas informações a partir extension_attributesde additional_dataentão e atribuí- las ao assignData()método para que elas persistissem. Mais tarde, recupero essas informações no capture()método e as uso. Você pode dar uma olhada aqui: Openpay PaymentMethod

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.