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_order
atau 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();