Konversi Kutipan Kustom ke Pesanan - “Tidak dapat mengambil contoh metode pembayaran”

10

Saya telah melihat kadang-kadang kasus di mana pesanan dilakukan, otorisasi dilakukan untuk pembayaran pada kartu pelanggan, pelanggan menerima email konfirmasi pesanan - tetapi tidak ada pesanan di Magento's sales_flat_orderatau sales_flat_order_grid.

Senjata pilihan di sini adalah untuk meminta admin membatalkan pembayaran di gateway, meminta pelanggan untuk menempatkan kembali.

Namun, kami memiliki semua kutipan, item kutipan, pembayaran kutipan, alamat kutipan. Secara teori , pesanan ini valid, setelah semua, kami memiliki otorisasi dan pelanggan memiliki email pesanan. Kesalahan terjadi beberapa saat setelah pembuatan email pesanan yang menyebabkan kemunduran (teori kerja saat ini).

Saya telah membuat skrip uji satu kali untuk mengubah kutipan ini menggunakan gateway kotak pasir. Namun, saya mengalami masalah dalam menghasilkan pembayaran. Saya sudah mencoba untuk menggunakan checkmo, free, authorizenet, semua kembali pengecualian yang sama:

PHP Fatal error:  Uncaught exception 'Mage_Core_Exception' with message 'Cannot retrieve payment method instance.' in /var/www/vhosts/magento/app/Mage.php:563
Stack trace:
#0 /var/www/vhosts/magento/app/code/core/Mage/Payment/Model/Info.php(83): Mage::throwException('Cannot retrieve...')

Lihat kode saya di bawah ini . Umpan balik disambut.

<?php
//.... stuff

$quote = Mage::getModel('sales/quote')->load(745);

$convert = Mage::getModel('sales/convert_quote');

$order = $convert->toOrder($quote);
$order->addressToOrder($quote->getAddress(),$order);

foreach($quote->getAllItems() as $item){
    $orderItem = $convert->itemToOrderItem($item);
    if ($item->getParentItem()) {
       $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId()));
    }
    $order->addItem($orderItem);
}

$data = array(
        'method' => 'authorizenet',
        'cc_type' => 'VI',
        'cc_number' => '4111111111111111',
        'cc_exp_month' => '1',
        'cc_exp_year' => (date('Y') + 6),
        'cc_cid' => '444'
);

$quote->getShippingAddress()->setPaymentMethod('authorizenet');
$quote->getShippingAddress()->setCollectShippingRates(true);

$payment = $quote->getPayment();
$payment->importData($data);
$quote->save();

$payment = $convert->paymentToOrderPayment($quote->getPayment());

$order->setPayment($quote->getPayment());

$message = '[Notice] - Order converted from quote manually';
$order->addStatusToHistory($order->getStatus(), $message);
$order->place();
$order->save();

$quote->setIsActive(false)->save();
Philwinkle
sumber

Jawaban:

7

Anda mengirim pesanan

 $quote->getPayment()

kode Anda akan terlihat seperti ini

...

$payment = $convert->paymentToOrderPayment($quote->getPayment());

$order->setPayment($payment);

...
Jeffrey L. Roberts
sumber
Anda benar - itu dia. Panggilan yang bagus.
philwinkle
Saya mendapatkan kesalahan PHP Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'The requested Payment Method is not available.' in /var/www/html/app/Mage.php:594Saya telah mengaktifkan metode pembayaran sebagai pesanan Pembelian dan ingin membuat pesanan baru dengan biaya nol tanpa metode pembayaran.
Rahul