Magento导入excel中的信息,然后创建订单

注:代码仅供参考

<?php
define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

//============================debug======================================



//============================debug======================================

//============================导入excel start======================================
require_once MAGENTO . '/lib/PHPExcel/PHPExcel.php';//引入PHPExcel类文件
$PHPExcel = new PHPExcel();// 实例化PHPExcel工具类

//excel文件的地址
$excel_fiel_path = MAGENTO.'/var/importexport/phpexcel.xlsx';

//分析文件获取后缀判断是2007版本还是2003
$extend = pathinfo("./" . $excel_fiel_path);
$extend = strtolower($extend["extension"]);
// 判断xlsx版本,如果是xlsx的就是2007版本的,否则就是2003
if ($extend=="xlsx") {
    $PHPReader = new PHPExcel_Reader_Excel2007();
    $PHPExcel = $PHPReader->load($excel_fiel_path);
}else{
    $PHPReader = new PHPExcel_Reader_Excel5();
    $PHPExcel = $PHPReader->load($excel_fiel_path);
}


/* 第二种方法*/
$objWorksheet = $PHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
//echo 'highestRow='.$highestRow;
//echo "<br>";
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数
//echo 'highestColumnIndex='.$highestColumnIndex;
//echo "<br>";
$headtitle=array();
for ($row = 2;$row <= $highestRow;$row++)
{
    $strs=array();
    //注意highestColumnIndex的列数索引从0开始
    for ($col = 0;$col < $highestColumnIndex;$col++)
    {
        $strs[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();

    }

    //调用创建订单函数
    createOrder($strs);

}
//============================导入excel end======================================


//============================funtions======================================
/**
 * 通过客户邮箱(customer_email)获取客户ID(entity_id)
 * 成功返回客户ID,失败返回false
 * @param $customer_email
 * @return bool|string
 */
function getCustomerIdByEmail($customer_email){
    $customer = Mage::getModel("customer/customer");
    //$WebsiteId = Mage::app()->getWebsite('admin')->getId();
    $customer->setWebsiteId(1);//查看数据库,设置你自己的website_id
    $customer->loadByEmail($customer_email);
    $customerId = $customer->getId();
    if(empty($customerId)){
        return false;
    }
    return $customerId;
}


/**
 * 通过客户邮箱(customer_email)得到客户实例Mage_Customer_Model_Customer(一个object)
 * 成功返回该实例对象,失败返回false
 * @param $customer_email
 * @return bool|object
 */
function getCustomerByEmail($customer_email){
    $customer = Mage::getModel("customer/customer");
    //$WebsiteId = Mage::app()->getWebsite('admin')->getId();
    $customer->setWebsiteId(1);//查看数据库,设置你自己的website_id
    $customer->loadByEmail($customer_email);
    if(!is_object($customer)){
        return false;
    }
    return $customer;
}

/**
 *设置送货地址 Shipping Address
 * @param $customer
 * @param $array
 * @return object
 */
function setShippingAddress ($array,$customer){
    $shippingAddress = Mage::getModel('sales/order_address');
    $shippingAddress->setStoreId($customer->getStoreId())
        ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
        ->setCustomerId($customer->getId())
        ->setCustomerAddressId($customer->getDefaultShipping())
        ->setFirstname($array['first_name'])
        ->setMiddlename($array['middle_name'])
        ->setLastname($array['last_name'])
        ->setStreet(array($array['street']))
        ->setCity($array['city'])
        ->setCountry_id('US')
        ->setRegion($array['region'])
        ->setPostcode($array['postcode'])
        ->setTelephone($array['telephone']);
    if(!is_object($shippingAddress)){
        return false;
    }
    return $shippingAddress;
}

//============================funtions end======================================



/**
 * 封装创建订单的函数
 * @param $array
 * @return object
 */
function createOrder($array){
    //处理数组
    $email = trim($array[0]);
    $sku = trim($array[1]);
    $qty = trim($array[2]);
    $street = trim($array[3]);
    $city = trim($array[4]);
    $region = trim($array[5]);
    $postcode = trim($array[6]);
    $telephone = trim($array[7]);
    $first_name = trim($array[8]);
    $middle_name = trim($array[9]);
    $last_name = trim($array[10]);


    $customerEmail = $email;
    $customer = getCustomerByEmail($customerEmail);//得到customer对象

    $transaction     = Mage::getModel('core/resource_transaction');

    $storeId         = $customer->getStoreId();
    //$reservedOrderId 获取即将要创建的订单 orderId
    $reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);

    $order = Mage::getModel('sales/order');
    $order->setIncrementId($reservedOrderId)
        ->setStoreId($storeId)
        ->setQuoteId(0)
        ->setGlobal_currency_code('USD')
        ->setBase_currency_code('USD')
        ->setStore_currency_code('USD')
        ->setOrder_currency_code('USD');
    //这里我设置成'USD', 你可以根据自己的需求修改或添加

    //保存用户信息
    $order->setCustomer_email($customer->getEmail())
        ->setCustomerFirstname($customer->getFirstname())
        ->setCustomerLastname($customer->getLastname())
        ->setCustomerGroupId($customer->getGroupId())
        ->setCustomer_is_guest(0)
        ->setCustomer($customer);



    // 保存 Billing Address
    $billing        = $customer->getDefaultBillingAddress();
    $billingAddress = Mage::getModel('sales/order_address');
    $billingAddress->setStoreId($storeId)
        ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
        ->setCustomerId($customer->getId())
        ->setCustomerAddressId($customer->getDefaultBilling())
        ->setCustomer_address_id($billing->getEntityId())
        ->setPrefix($billing->getPrefix())
        ->setFirstname($billing->getFirstname())
        ->setMiddlename($billing->getMiddlename())
        ->setLastname($billing->getLastname())
        ->setSuffix($billing->getSuffix())
        ->setCompany($billing->getCompany())
        ->setStreet($billing->getStreet())
        ->setCity($billing->getCity())
        ->setCountry_id($billing->getCountryId())
        ->setRegion($billing->getRegion())
        ->setRegion_id($billing->getRegionId())
        ->setPostcode($billing->getPostcode())
        ->setTelephone($billing->getTelephone())
        ->setFax($billing->getFax());

    $order->setBillingAddress($billingAddress);

    //新的送货地址(shipping address)
    $newShippingAddress = array(
        'first_name'=>$first_name,
        'middle_name'=>$middle_name,
        'last_name'=>$last_name,
        'street'=>$street,
        'city'=>$city,
        'region'=>$region,
        'postcode'=>$postcode,
        'telephone'=>$telephone
    );
    //调用保存送货地址(Shipping Address)函数
    $newShippingAddress = setShippingAddress($newShippingAddress,$customer);



    //把送货地址写入订单
    $order->setShippingAddress($newShippingAddress)
        ->setShipping_method('flatrate_flatrate')
        ->setShippingDescription('This is a test!');

    //这里可以根据你的需求来设置付款方式名称
    $orderPayment = Mage::getModel('sales/order_payment');
    $orderPayment->setStoreId($storeId)
        ->setCustomerPaymentId(0)
        ->setMethod('purchaseorder')
        ->setPo_number(' – ');

    $order->setPayment($orderPayment);


    //组装products
    $subTotal = 0;
    $products = array(
        "$sku" => array('qty' => $qty)
    );
    foreach ($products as $sku => $product) {
        //$_product  = Mage::getModel('catalog/product')->load($productId);//通过产品ID
        $_product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);//通过产品SKU
        $rowTotal  = $_product->getPrice() * $product['qty'];
        $orderItem = Mage::getModel('sales/order_item');
        $orderItem->setStoreId($storeId)
            ->setQuoteItemId(0)
            ->setQuoteParentItemId(NULL)
            ->setProductId($_product->getId())
            ->setProductType($_product->getTypeId())
            ->setQtyBackordered(NULL)
            ->setTotalQtyOrdered($product['rqty'])
            ->setQtyOrdered($product['qty'])
            ->setName($_product->getName())
            ->setSku($_product->getSku())
            ->setPrice($_product->getPrice())
            ->setBasePrice($_product->getPrice())
            ->setOriginalPrice($_product->getPrice())
            ->setRowTotal($rowTotal)
            ->setBaseRowTotal($rowTotal);

        $subTotal += $rowTotal;
        $order->addItem($orderItem);
    }

    $order->setSubtotal($subTotal)
        ->setBaseSubtotal($subTotal)
        ->setGrandTotal($subTotal)
        ->setBaseGrandTotal($subTotal);

    $transaction->addObject($order);
    $transaction->addCommitCallback(array($order, 'place'));
    $transaction->addCommitCallback(array($order, 'save'));
    $transaction->save();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值