Magento代码之订单创建流程

        直接看代码吧。下面的代码是如何通过程序创建一个完美订单。

        <?php
        require_once 'app/Mage.php';
         
        Mage::app('default');//初始化程序,设置当前店铺
         
        $store = Mage::app()->getStore('default');
        //通过电子邮件获取用户,当然也可以不获取,创建guest订单
        $customer = Mage::getModel('customer/customer');
        $customer->setStore($store);
        $customer->loadByEmail('email_address@gmail.com');
         
        //初始化Quote,Magento的订单是通过Quote来转化过去的
        $quote = Mage::getModel('sales/quote');
        $quote->setStore($store);
        $quote->assignCustomer($customer);//如果有用户则执行这个
         
        $product1 = Mage::getModel('catalog/product')->load(166); /* HTC Touch Diamond */
        $buyInfo1 = array('qty' => 1);
         
        $product2 = Mage::getModel('catalog/product')->load(18); /* Sony Ericsson W810i */
        $buyInfo2 = array('qty' => 3);
        //添加商品到Quote
        $quote->addProduct($product1, new Varien_Object($buyInfo1));
        $quote->addProduct($product2, new Varien_Object($buyInfo2));
        //设置账单和收货品地址
        $billingAddress = $quote->getBillingAddress()->addData($customer->getPrimaryBillingAddress());
        $shippingAddress = $quote->getShippingAddress()->addData($customer->getPrimaryShippingAddress());
        //设置配送和支付方式
        $shippingAddress->setCollectShippingRates(true)->collectShippingRates()
                        ->setShippingMethod('flatrate_flatrate')
                        ->setPaymentMethod('checkmo');
         
        $quote->getPayment()->importData(array('method' => 'checkmo'));
        //Quote计算运费
        $quote->collectTotals()->save();
        //将Quote转化为订单
        $service = Mage::getModel('sales/service_quote', $quote);
        $service->submitAll();
        $order = $service->getOrder();
        /***至此订单已经成功生成,下面是注册付款信息***/
         
        $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
        $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
        $invoice->register();
         
        $transaction = Mage::getModel('core/resource_transaction')
                            ->addObject($invoice)
                            ->addObject($invoice->getOrder());
         
        $transaction->save();
        
        ?>

Magento代码之订单创建流程的更多相关文章

  1. PP生产订单创建、下达、报工、收货、投料

    转自http://blog.sina.com.cn/s/blog_69fb8eb60102vpjd.html SAP 物料订单创建.下达.报工.收货与投料(ABAP代码) (2015-06-03 22 ...

  2. 使用C#代码发起K2 Blackpearl流程

    转:http://www.cnblogs.com/dannyli/archive/2011/08/02/2125285.html 使用C#代码,发起一个K2的流程,其形式和链接SQL Server数据 ...

  3. ADF 项目创建流程

    ADF 项目创建流程: 1.首先建好应用 2.创建model,UI 3.创建EO,VO,AO, VL 4.设置EO的属性 5.新建lov 6.设置VO的View Accessors,并设置Attrib ...

  4. 怎样改动、扩展并重写Magento代码

    作为一个开发人员的你,肯定要改动Magento代码去适应你的业务需求,可是在非常多时候我们不希望改动Magento的核心代码,这里有非常多原因, 比如将来还希望升级Magento.还想使用很多其它的M ...

  5. 【Java基础】Java类的加载和对象创建流程的详细分析

    相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 package ...

  6. Java类的加载和对象创建流程的详细分析

    相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下: package com.test; public ...

  7. 深入理解Magento-第九章-修改、扩展、重写Magento代码

    (博主提示:本章应该不是原作者的第九章,仅作补充和参考) 作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因,例如 ...

  8. UE4之Slate:App默认窗口的创建流程

    UE4版本:4.24.3源码编译 Windows10 + VS2019开发环境 在先前分享的基础上,现在来梳理下App启动时默认窗口的创建流程,以及相关的类.对象之间的抽象层级: 纯C++工程配置 S ...

  9. 含大量行的订单创建时候creditlimit校验最耗时间

    含大量行的订单创建时候creditlimit校验最耗时间

随机推荐

  1. ios基础篇(二十七)—— Json解析

    一.什么是Json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...

  2. RMAN 前期准备工作和实例

    理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件.保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有 ...

  3. 打造最高效的科研环境之Emacs插件们

    0 盲人摸象 作为初学者,迫切的需求就是直接上手Emacs并打造包含自动补全命令在内的科研环境. 和网上众多的插件安装的教程相比,我认为找到一个与自己需求匹配的Emacs配置环境来得更方便. 本例中, ...

  4. 荣品四核4412开发板的USB摄像头问题

    RP4412开发板是荣品电子研发的一款三星四核Exynos4412评估板开发板,支持WIFI+LAN上网.蓝牙4.0.4G上网.500万自动对焦摄像头.GPS.网卡.音频,1080P HDMI音视频同 ...

  5. 查看cpu

    使用系统命令top即可看到如下类似信息: Cpu(s):  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st ...

  6. 实验7 BindService模拟通信

    实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016.4.16 实验项目名称 BindService模拟通信 实验地点 S30010 实验类型 □验证型    √设计型    ...

  7. Making the Grade(POJ3666)

    题目大意: 给出长度为n的整数数列,每次可以将一个数加1或者减1,最少要多少次可以将其变成单调增或者单调减(不严格). 题解: 1.一开始我有一个猜想,就是不管怎么改变,最终的所有数都是原来的某个数. ...

  8. robots笔记以免忘记

    html头部标签写法: <meta name="robots" content="index,follow" /> content中的值决定允许抓取 ...

  9. GridView获取列子段的几种途径

    GridView是ASP.NET中功能强大的数据显示控件,它的RowDataBound事件为我们提供了方便的控制行.列数据的途径. 要获取当前行的某个数据列,我在实践中总结有如下几种方法: 1. Ce ...

  10. RTTI

    RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   编辑本段RTTI介绍 RTTI提 ...