맞춤 견적 견적을 주문으로- '결제 수단 인스턴스를 검색 할 수 없습니다'


10

경우에 따라 주문이 이루어지고 고객 카드로 지불이 승인되고 고객이 주문 확인 이메일을 수신 하지만 Magento 또는 의 주문이없는 경우 를 보았습니다 .sales_flat_ordersales_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();

답변:


7

주문을 보내고 있습니다

 $quote->getPayment()

코드는 다음과 같아야합니다

...

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

$order->setPayment($payment);

...

당신 말이 맞아요 잘 했어
philwinkle

나는 오류 얻고 PHP Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'The requested Payment Method is not available.' in /var/www/html/app/Mage.php:594구매로 내가 설정 한 지불 방법을 orderand 지불 방법이없는 제로 비용으로 새로운 질서를 만들려고합니다.
Rahul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.