Cotización de conversión personalizada a pedido: "No se puede recuperar la instancia del método de pago"


10

He visto en ocasiones el caso en que se realiza un pedido, se realiza una autorización para el pago en la tarjeta del cliente , el cliente recibe un correo electrónico de confirmación del pedido , pero no existe ningún pedido en Magento's sales_flat_ordero sales_flat_order_grid.

El arma de elección aquí es requerir que el administrador anule el pago en la puerta de enlace, solicite al cliente que lo reemplace.

Sin embargo, tenemos todos los presupuestos, artículos de cotización, pago de cotización, dirección de cotización. En teoría, este pedido es válido, después de todo, tenemos autorización y el cliente tiene un correo electrónico de pedido. El error ocurrió en algún momento después de la generación del correo electrónico del pedido que causó una reversión (la teoría de trabajo actual).

He creado un script de prueba único para convertir esta cita usando una puerta de enlace de sandbox. Sin embargo, tengo problemas para generar el pago. He tratado de uso checkmo, free, authorizenet, toda devolver la misma excepció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...')

Ver mi código a continuación . Comentarios bienvenidos.

<?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();

Respuestas:


7

Estás enviando el pedido

 $quote->getPayment()

su código debería verse así

...

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

$order->setPayment($payment);

...

Tienes razón, eso fue todo. Buena llamada.
philwinkle

Recibo un error. PHP Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'The requested Payment Method is not available.' in /var/www/html/app/Mage.php:594He habilitado el método de pago como pedido de compra y deseo crear un nuevo pedido con costo cero sin método de pago.
Rahul
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.