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 :)
fonte
Respostas:
O Magento2 não é bem arquitetado aqui. O que fiz foi passar essas informações a partir
extension_attributes
deadditional_data
então e atribuí- las aoassignData()
método para que elas persistissem. Mais tarde, recupero essas informações nocapture()
método e as uso. Você pode dar uma olhada aqui: Openpay PaymentMethodfonte