Вопрос

Извините, я очень новичок в Magento.

Я следую этот урок Чтобы создать новый способ оплаты. Это обеспечивает полное Пример кода здесь.

В учебном пособии, говоря о StandardController.php::successAction(), говорит,

Если все проверяется, мы можем изменить состояние заказа с State_pending_payment на State_new, поэтому он готов к тому, что кто -то в магазине отправится и завершена. Здесь также мы преобразуем цитату в счет и отметим ее как оплаченную.

Я могу найти это первое предложение в коде, однако я не могу найти вторую часть, которая должна «преобразовать цитату в счет и пометить ее как оплаченную»:

if($state == Mage_Sales_Model_Order::STATE_PENDING_PAYMENT){

    $msg = 'Payment completed via MockPay.';
    $order->setState(Mage_Sales_Model_Order::STATE_NEW ,true,$msg,false);
    $order->save();

    $quote = Mage::getSingleton('checkout/session')->getQuote();
    $quote->setIsActive(false)->save();

}

Возможно, автор забыл включить эту часть кода. Я попытался прочитать доктора Magento, и мог только преобразовать цитату в заказ, а не счета:

    $convertQuote = Mage::getSingleton('sales/convert_quote');
    $order = $convertQuote->toOrder($quote);

Каким должен быть код здесь, чтобы «преобразовать цитату в счет и отметить ее как оплачиваемое»?

Это было полезно?

Решение

Вы не можете преобразовать цитату в счет -фактуру, вы должны преобразовать цитату в заказ, а затем создать счет. Кроме того, метод оплаты не должен преобразовать цитату в заказ, это делается с помощью действия сохранения заказа во время оформления заказа.

Чтобы создать счет, который вы можете использовать:

$invoice = $order->prepareInvoice();
$invoice->register()->capture();

Mage::getModel('core/resource_transaction')
    ->addObject($invoice)
    ->addObject($invoice->getOrder())->save();

Вы можете добавить этот код в успешности в standardcontroller.php вашего модуля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top