경우에 따라 주문이 이루어지고 고객 카드로 지불이 승인되고 고객이 주문 확인 이메일을 수신 하지만 Magento 또는 의 주문이없는 경우 를 보았습니다 .sales_flat_order
sales_flat_order_grid
여기서 선택한 무기는 관리자가 게이트웨이에서 지불을 무효화하고 고객에게 교체를 요청하도록 요구하는 것입니다.
그러나 우리는 모든 견적, 견적 품목, 견적 지불, 견적 주소가 있습니다. 이론적 으로이 주문은 유효합니다. 결국 우리는 승인을 받았으며 고객은 주문 이메일을 받았습니다. 주문 이메일 생성 후 롤백 (현재 작업 이론)을 일으킨 오류가 발생했습니다.
샌드 박스 게이트웨이를 사용하여이 견적을 변환하기위한 테스트 일회용 스크립트를 작성했습니다. 그러나 결제를 생성하는 데 문제가 있습니다. 내가 사용하려고했습니다 checkmo
, free
, authorizenet
, 모두 같은 예외를 반환 :
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...')
아래 코드를 참조하십시오 . 피드백 환영합니다.
<?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();