Benutzerdefiniertes Angebot in Bestellung konvertieren - "Zahlungsmethodeninstanz kann nicht abgerufen werden"


10

Ich habe gelegentlich den Fall gesehen, dass eine Bestellung aufgegeben wird, eine Autorisierung für die Zahlung auf der Kundenkarte erfolgt, der Kunde eine Bestellbestätigungs-E-Mail erhält - aber keine Bestellung bei Magento sales_flat_orderoder sales_flat_order_grid.

Die Waffe der Wahl besteht darin, den Administrator zu verpflichten, die Zahlung im Gateway für ungültig zu erklären, und den Kunden zu bitten, sie erneut zu platzieren.

Wir haben jedoch alle Angebote, Angebotsartikel, Angebotszahlungen und Angebotsadressen. Theoretisch ist diese Bestellung gültig, schließlich haben wir eine Autorisierung und der Kunde hat eine Bestell-E-Mail. Der Fehler trat einige Zeit nach der Generierung der Bestell-E-Mail auf, die einen Rollback verursachte (die aktuelle Arbeitstheorie).

Ich habe ein einmaliges Testskript erstellt, um dieses Zitat mithilfe eines Sandbox-Gateways zu konvertieren. Ich habe jedoch Probleme beim Generieren der Zahlung. Ich habe zu verwenden versucht checkmo, free, authorizenet, alle die gleiche Ausnahme zurück:

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...')

Siehe meinen Code unten . Feedback erwünscht.

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

Antworten:


7

Sie senden die Bestellung

 $quote->getPayment()

Ihr Code sollte so aussehen

...

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

$order->setPayment($payment);

...

Du hast recht - das war es. Guter Anruf.
Philwinkle

Ich PHP Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'The requested Payment Method is not available.' in /var/www/html/app/Mage.php:594erhalte die Fehlermeldung, dass ich die Zahlungsmethode als Bestellung aktiviert habe und eine neue Bestellung ohne Kosten ohne Kostenmethode erstellen möchte.
Rahul
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.