Đôi khi tôi đã thấy một trường hợp đặt hàng, ủy quyền được thực hiện để thanh toán trên thẻ khách hàng, khách hàng nhận được email xác nhận đơn hàng - nhưng không có đơn hàng nào tồn tại trong Magento sales_flat_order
hay sales_flat_order_grid
.
Vũ khí được lựa chọn ở đây là yêu cầu quản trị viên vô hiệu hóa khoản thanh toán trong cổng, yêu cầu khách hàng đặt lại.
Tuy nhiên, chúng tôi có tất cả các báo giá, báo giá, báo giá thanh toán, địa chỉ báo giá. Về lý thuyết , đơn hàng này là hợp lệ, sau tất cả, chúng tôi có ủy quyền và khách hàng có email đặt hàng. Lỗi xảy ra đôi khi sau khi tạo email đặt hàng gây ra sự quay trở lại (lý thuyết làm việc hiện tại).
Tôi đã tạo một kịch bản thử nghiệm một lần để chuyển đổi trích dẫn này bằng cách sử dụng cổng hộp cát. Tuy nhiên, tôi gặp khó khăn trong việc tạo thanh toán. Tôi đã cố gắng để sử dụng checkmo
, free
, authorizenet
, tất cả trở lại cùng một ngoại lệ:
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...')
Xem mã của tôi dưới đây . Phản hồi hoan nghênh.
<?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();