Ben, bir yetkilendirme müşteri kartında ödeme için yapılır, zaman zaman sipariş verildikten davayı gördük müşteriye sipariş onayı e-postası alır - ancak hiçbir emir var Magento en bölgesi sales_flat_order
veya sales_flat_order_grid
.
Burada tercih edilen silah, yöneticinin ağ geçidindeki ödemeyi geçersiz kılmasını, müşteriden yeniden yerleştirmesini istemektir.
Ancak, biz tüm teklif, teklif öğeleri, teklif ödeme, teklif adresi. Teorik olarak bu sipariş geçerlidir, sonuçta yetkimiz var ve müşterinin sipariş e-postası var. Hata, geri alma işlemine neden olan sipariş e-postası oluşturma işleminden bir süre sonra meydana geldi (mevcut çalışma teorisi).
Bir sanal alan ağ geçidi kullanarak bu teklifi dönüştürmek için bir test bir kerelik komut dosyası oluşturduk. Ancak, ödemeyi oluşturma konusunda sorun yaşıyorum. Ben kullanımına denedim checkmo
, free
, authorizenet
, hepsi aynı istisna dönüş:
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...')
Aşağıdaki koduma bakın . Geribildirim memnuniyetle karşıladı.
<?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();