Magento2: Как лучше всего добавить поле для пользовательского метода оплаты?


13

Я установил новый метод оплаты в Magento 2 с настраиваемым полем метода оплаты (например, «po_number» из magento / offline-payment- Methods ). И интерфейс работает отлично (отображение поля, проверка и т. Д.).

Однако, если я хочу разместить заказ Magento, запрос WebAPI выдает следующую ошибку:

"Свойство \" CustomField \ "не имеет соответствующего установщика в классе \" Magento \ Quote \ Api \ Data \ PaymentInterface \ ".

Кажется, что Magento проверяет пользовательское поле по отношению к основному интерфейсу оплаты, где определены методы, такие как getPoNumber и setPoNumber .

Я уже пытался добавить настраиваемое поле с помощью атрибутов расширения:

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

и создал интерфейс с конкретными методами:

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

Но это не работает. Magento по-прежнему проверяет базовый интерфейс оплаты.

Теперь возникает вопрос, как заставить Magento принять поле пользовательского метода оплаты? Любые указатели очень ценятся :)


Мне также интересно, я использовал тот же подход (extension_attributes), но безуспешно, затем я отбросил идею и использовал set / getAdditionalInformation ('custom_field') вместо использования настраиваемого поля.
Carco

Ответы:


3

Magento2 здесь не очень хорошо спроектирован. То , что я сделал, я прошел мимо них , как extension_attributesиз additional_data, затем назначается эту информацию в assignData()методе поэтому он получает сохраняется. Позже я получаю такую ​​информацию в capture()методе и использую ее. Вы можете посмотреть здесь: Openpay PaymentMethod

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.