Saya telah menyiapkan metode pembayaran baru di Magento 2 dengan bidang metode pembayaran khusus (seperti "po_number" dari magento / metode pembayaran offline ). Dan ujung depan berfungsi dengan baik (bidang muncul, validasi, dll.).
Namun, jika saya ingin memesan Magento, permintaan WebAPI melempar kesalahan berikut:
"Properti \" CustomField \ "tidak memiliki setter yang sesuai di kelas \" Magento \ Penawaran \ Api \ Data \ PaymentInterface \ ".
Tampaknya Magento memvalidasi bidang khusus terhadap antarmuka pembayaran inti di mana metode seperti getPoNumber dan setPoNumber didefinisikan.
Saya sudah mencoba menambahkan bidang khusus melalui atribut ekstensi:
<extension_attributes for="Magento\Quote\Api\Data\PaymentInterface">
<attribute code="custom_field" type="Vendor\Module\Api\Data\MethodInterface[]" />
</extension_attributes>
dan menciptakan antarmuka dengan metode spesifik:
<?php
namespace Vendor\Module\Api\Data;
use Magento\Framework\Api\ExtensibleDataInterface;
interface MethodInterface extends ExtensibleDataInterface
{
public function setCustomField($customField);
public function getCustomField();
}
Tetapi ini tidak berhasil. Magento masih memvalidasi terhadap antarmuka pembayaran inti.
Pertanyaannya sekarang adalah, bagaimana cara agar Magento menerima bidang metode pembayaran khusus? Setiap pointer sangat dihargai :)
sumber
Jawaban:
Magento2 tidak dirancang dengan baik di sini. Apa yang saya lakukan adalah saya melewati mereka
extension_attributes
padaadditional_data
, kemudian menetapkan informasi itu dalamassignData()
metode sehingga tetap ada. Kemudian saya mengambil informasi tersebut dalamcapture()
metode dan menggunakannya. Anda dapat melihatnya di sini: Metode Pembayaran Openpaysumber