Magento2: Який найкращий спосіб додати поле спеціального способу оплати?


13

Я створив новий метод оплати в Magento 2 із полем користувацького способу оплати (наприклад, "po_number" від magento / offline- Payment method ). І передній кінець працює прекрасно (показ поля, валідація тощо).

Однак якщо я хочу розмістити замовлення 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.