我已经创建了我的自定义付款模块,它适用于支付网关,一切正常,但我想在返回网址返回成功代码时将订单设置为付费。到目前为止,我已经明白,我必须为订单创建一个发票,以便能够将其设置为支付到Magento面板。
首先,请告诉我,如果我在这儿之前就已经死了。
然后我尝试在success.phtml上创建发票,其代码如下:
$invoice = Mage::getModel('sales/service_order', $order->prepareInvoice());
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
$invoice->register();
$invoice->getOrder()->setCustomerNoteNotify(true);
$invoice->getOrder()->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically INVOICED by Rico.', false);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder());
$transactionSave->save();
但它总是给我一个magento错误,所以可能不是一个好主意。
任何帮助将不胜感激
修改
从此http://blog.chapagain.com.np/magento-quick-way-to-create-order-invoice-programmatically/
我用过
$invoiceId = Mage::getModel('sales/order_invoice_api')
->create($_order->getIncrementId(), array());
代替上面的代码,似乎支付了订单。但我不确定,如果已经足够了。
答案 0 :(得分:4)
我建议您在客户从支付网关返回您的网站时,然后必须转到magento控制器,并在此处添加代码所需的操作
$order=Mage::getModel('sales/order')->load($orderID); if($order->canInvoice() and $order->getIncrementId()) { $items = array(); foreach ($order->getAllItems() as $item) { $items[$item->getId()] = $item->getQtyOrdered(); } $invoiceId=Mage::getModel('sales/order_invoice_api')->create($order->getIncrementId(),$items,null,false,true); Mage::getModel('sales/order_invoice_api')->capture($invoiceId)}; }
请参阅http://www.amitbera.com/programmatically-create-invoice-of-a-new-order-in-magento/