Saya pergi ke Magento 2 Admin> Pemasaran> Promosi> Aturan Harga Keranjang dan membuat Aturan baru: Pembayaran Transfer Bank:
Informasi Aturan Tab:
- Nama Aturan: Pembayaran Transfer Bank
- Status: Aktif
- Situs web: Situs Web Utama
- Grup Pelanggan: pilih semua
- Kupon: Tidak Ada Kupon
- Penggunaan per Pelanggan: 0
- Dari: blank
- Kepada: kosong
- Prioritas: 0
- Publik di Umpan RSS: Tidak
Tab Ketentuan:
- Jika SEMUA kondisi ini BENAR:
- Metode Pembayaran adalah Pembayaran Transfer Bank
Tab Tindakan:
- Berlaku: persen dari diskon harga produk
- Jumlah Diskon: 2
- Diskon Qty Maksimum Berlaku Untuk: 0
- Diskon Jumlah Langkah (Beli X): 0
- Berlaku untuk Jumlah Pengiriman: No
- Buang aturan selanjutnya: Tidak
- Gratis Pengiriman: Tidak
- Terapkan aturan hanya untuk mengangkut item yang cocok dengan kondisi berikut (biarkan kosong untuk semua item): tidak ada
Kemudian saya mengaktifkan metode Pembayaran Transfer Bank, buka halaman checkout, klik Pembayaran Transfer Bank tetapi Harga Diskon Persen tidak muncul dalam Ringkasan Pesanan.
Tolong beri saya saran. Bagaimana cara membuat diskon pada metode pembayaran di Magento 2. Untuk Magento 1, itu tergerus dengan baik.
Terima kasih banyak
Jawaban:
Aturan ini tidak berfungsi karena Magento 2 tidak menyimpan metode pembayaran untuk mengutip ketika Anda memilihnya. Dan itu juga tidak memuat ulang total ketika memilih metode pembayaran. Dan sayangnya, Anda harus menulis modul khusus untuk menyelesaikan masalah.
Modul baru hanya membutuhkan 4 file yang akan dibuat:
app / code / Namespace / ModuleName / etc / frontend / routes.xml
Ini akan menentukan pengontrol baru untuk modul kami.
app / code / Namespace / ModuleName / Controller / Checkout / ApplyPaymentMethod.php
File ini membuat tindakan pengontrol untuk menyimpan metode pembayaran yang dipilih untuk mengutip
app / code / Namespace / ModuleName / view / frontend / requireejs-config.js
File ini memungkinkan untuk mengganti
Magento_Checkout/js/action/select-payment-method
fileapp / code / Namespace / ModuleName / view / frontend / web / js / action / select-payment-method.js
Mengirim permintaan ajax untuk menyimpan metode pembayaran dan memuat ulang total keranjang.
PS Bagian dari kode diambil dari ekstensi Biaya Pembayaran untuk Magento 2.
sumber
Di Magento 2.2 saya tidak bisa mendapatkan jawaban MagestyApps untuk bekerja. Saya perlu menambahkan beberapa file tambahan. Karena:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(sebenarnya kembali ke\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
), mengharapkan data yangpayment_method
akan ditetapkan pada alamat kutipan;payment_method
data pada alamat kutipan, tidak berfungsi ketika kutipan menjadi pesanan, karena tidak bertahanpayment_method
;Modul berikut ini berfungsi untuk saya (terima kasih atas jawaban MagestyApps, yang didasarkan atas itu semua):
registrasi.php
etc / module.xml
etc / di.xml
etc / frontend / routes.xml
Controller / Checkout / ApplyPaymentMethod.php
Model / Aturan / Ketentuan / FilterTextGenerator / Alamat / PaymentMethod.php
Plugin / AddPaymentMethodOptionBack.php
view / frontend / requireejs-config.js
view / frontend / web / js / action / select-payment-method.js
sumber
Fatal error: Class 'Magento\AdvancedSalesRule\Model\Rule\Condition\Address\PaymentMethod' not found in Vendor/SalesRulesPaymentMethod/Model/Rule/Condition/FilterTextGenerator/Address/PaymentMethod.php on line 7
. Saya bahkan mencoba mengubah AdvancedSalesRule menjadi SalesRule karena saya dapat melihat tidak ada Model AdvancedSalesRule di Magento 2.2.2Kami baru saja memeriksa aturan yang sama dan ternyata tidak berfungsi. Dengan menggunakan kondisi yang sama, tidak ada informasi tentang metode yang dipilih dikirim dan tidak dicatat di mana pun sampai pesanan ditempatkan dan aturan mungkin tidak berfungsi.
Alamat tidak memiliki metode pembayaran hingga validasi dan mendapatkan metode pembayaran dari kutipan pembayaran yang tidak ada karena tidak ada informasi yang dikirim (
$model->getQuote()->getPayment()->getMethod()
pengembaliannull
).Kami menduga, bahwa ini adalah bug Magento. Ketika Anda memilih metode pembayaran, informasi tersebut harus dikirim terlebih dahulu.
sumber
Solusi dengan modul khusus berfungsi.
Saya hanya berpikir bahwa ini akan menjadi info yang berguna bagi pemula Magento untuk mengetahui bahwa Anda juga perlu menambahkan file-file ini untuk dapat menambah dan mengaktifkan modul ini:
(salin dari modul yang berbeda dan ubah file sesuai dengan nama modul dan namespace Anda)
maka Anda akan bisa lari
bin/magento setup:upgrade
sumber
saya membuat file dan mengganti Namespace dan modulename tetapi saya pikir file saya tidak akan dieksekusi.
Mungkin ada kesalahan pada file saya ??
registrasi.php
composer.json
}
module.xml
sumber
sebenarnya, menimpa file inti magento bukanlah ide yang baik. Alih-alih menimpa
Magento_Checkout/js/action/select-payment-method
lebih baik buat mixin untuk itu. Dan Anda dapat menanganinya tanpa membuat controller baru. Lihat di bawah (selain jawaban @magestyapps)app / code / Namespace / ModuleName / view / frontend / requireejs-config.js
app / code / Namespace / ModuleName / view / frontend / js / checkout / action / select-payment-method-mixin.js
sumber
Periksa solusinya di posting di bawah ini:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
sumber