注:代码仅供参考
<?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();
}