magento在程序中创建订单(create order by code)
2012-12-03 10:31
459 查看
在magento的电子商务流程中,按照正常的支付流程就能够创建订单,但有的时候我们需要在程序中自己创建订单,比如当我们的产品不需要支付(比如软件),甚至不需要登录就能下载时,我们就需要在程序中创建这样一个订单,并且为订单开发票
下面就是只需要产品Id信息就能够创建订单的代码
下面就是只需要产品Id信息就能够创建订单的代码
protected function _createOrder($productId) { $post['product_id'][0]=$productId; $post['product_qty'][0]=1; $shoppingCart = array(); for ($i = 0; $i<count($post['product_id']); $i++) { $productId = $post['product_id'][$i]; $productQty = $post['product_qty'][$i]; $product = Mage::getModel('catalog/product')->load($productId); $shoppingCart[] = array('product'=>$product, 'productQty'=>$productQty); } //$customer = Mage::getModel('customer/customer')->load($post['customer_id']); $customer=null; $params=array('customer'=>$customer, 'shoppingCart'=>$shoppingCart,); $quote = $this->_prepareOrder($params); $order = $this->_confirmOrder($quote); /*$order->addStatusToHistory( $order->getStatus(), Mage::helper('alipay')->__('Customer successfully returned from Alipay') ); $order->save(); $this->saveInvoice($order);*/ $invoice=$this->_invoiceOrder($order); } protected function _prepareOrder($params) { foreach($params as $k=>$v) { $$k=$v; } $storeId = Mage::app()->getStore()->getId(); $quote = Mage::getModel('sales/quote'); //sets ship/bill address //$quote->getBillingAddress()->setShouldIgnoreValidation(true); //$quote->getShippingAddress()->setShouldIgnoreValidation(true); $store = $quote->getStore()->load($storeId); $quote->setStore($store); foreach($shoppingCart as $shoppingItem) { foreach($shoppingItem as $k=>$v) { $$k=$v; } $quoteItem=Mage::getModel('sales/quote_item')->setProduct($product); $quoteItem->setQuote($quote); $quoteItem->setQty($productQty); $quote->addItem($quoteItem); } $shippingAddress = $quote->getShippingAddress(); $shippingAddress->setShippingMethod('freeshipping'); $rate = new Mage_Sales_Model_Quote_Address_Rate(); $rate->setCode('freeshipping'); $shippingAddress->addShippingRate($rate); $shippingAddress->setCollectShippingRates(true); $quote->getPayment()->setMethod('purchaseorder'); $quote->collectTotals()->save(); return $quote; } protected function _confirmOrder($quote) { $service = Mage::getModel('onepagecheckout/service_quote', $quote); $service->submitAll(); Mage::getSingleton('checkout/session')->setLastQuoteId($quote->getId()) ->setLastSuccessQuoteId($quote->getId()) ->clearHelperData(); return $service->getOrder(); } protected function saveInvoice(Mage_Sales_Model_Order $order) { if ($order->canInvoice()) { $convertor = Mage::getModel('sales/convert_order'); $invoice = $convertor->toInvoice($order); foreach ($order->getAllItems() as $orderItem) { if (!$orderItem->getQtyToInvoice()) { continue ; } $item = $convertor->itemToInvoiceItem($orderItem); $item->setQty($orderItem->getQtyToInvoice()); $invoice->addItem($item); } $invoice->collectTotals(); $invoice->register()->capture(); Mage::getModel('core/resource_transaction') ->addObject($invoice) ->addObject($invoice->getOrder()) ->save(); return true; } return false; } protected function _invoiceOrder($order) { $convertOrder=Mage::getSingleton('sales/convert_order'); $invoice=$convertOrder->toInvoice($order); foreach ($order->getAllItems() as $item) { $invoiceItem = $convertOrder->itemToInvoiceItem($item); if ($item->getParentItem()) { $invoiceItem->setParentItem($invoice->getItemById($item->getParentItem()->getId())); } $invoiceItem->setQty($item->getQtyToInvoice()); $invoice->addItem($invoiceItem); } $invoice->collectTotals(); $invoice->register(); $orderPayment=$order->getPayment(); $orderPayment->pay($invoice); // workaround for magento 1.4 $invoice->getOrder()->setActionFlag(Mage_Sales_Model_Order::ACTION_FLAG_SHIP, false); $order = $invoice->getOrder(); $order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE); $status = $order->getConfig()->getStateDefaultStatus(Mage_Sales_Model_Order::STATE_COMPLETE); $order->addStatusToHistory($status); $transaction = Mage::getModel('core/resource_transaction'); $transaction->addObject($invoice); $transaction->addObject($invoice->getOrder()); $transaction->save(); $invoice->save(); return $invoice; }
相关文章推荐
- SAP-MM-02 How To Create A Purchasing Order 创建采购订单
- 高级应用Magento-订单创建流程及程序代码
- magento 订单order 增加栏目
- sharepoint admin svc must be running in order to create deployment timer job 若要创建计时器作业,必须执行SVC
- Android Studio 创建文件是 Create by administrator修改
- 创建Oracle的用户 create user scott identified by tiger;
- Lua source code Recommended reading order by mikemike
- Magento代码之订单创建流程
- How to create Magento invoice from order
- BUG:Visual Studio 6.0 中出现错误消息“Setup Was Unable to Create a DCOM User Account”(安装程序无法创建 DCOM 用户帐户)
- C#使用Create创建文件后,报The Process cannot access the file because it is being used by another process的异常
- 【南京】根据销售订单创建交货单并自动拣配、过账发货程序
- 通过ClickOnce发布程序,通过Create Test Certificate创建证书,证书过期的解决方案
- CRM_ORDER_MAINTAIN 创建订单简单示例
- Magento通过订单id修改订单创建时间的sql
- BAPI_PO_CREATE1 创建采购订单时价格的处理函数
- BAPI_PO_CREATE创建采购订单
- 根据BAPI_PO_CREATE1创建采购订单
- 支付宝自动支付程序1.1算法注册机 Code.By.HackWm[D.S.T].