创建订单,需要有一个包含地址的个人账户
- $id=1; // get Customer Id
- $customer = Mage::getModel('customer/customer')->load($id);
- $transaction = Mage::getModel('core/resource_transaction');
- $storeId = $customer->getStoreId();
- $reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);
- $order = Mage::getModel('sales/order')
- ->setIncrementId($reservedOrderId)
- ->setStoreId($storeId)
- ->setQuoteId(0)
- ->setGlobal_currency_code('USD')
- ->setBase_currency_code('USD')
- ->setStore_currency_code('USD')
- ->setOrder_currency_code('USD');
- //Set your store currency USD or any other
- // set Customer data
- $order->setCustomer_email($customer->getEmail())
- ->setCustomerFirstname($customer->getFirstname())
- ->setCustomerLastname($customer->getLastname())
- ->setCustomerGroupId($customer->getGroupId())
- ->setCustomer_is_guest(0)
- ->setCustomer($customer);
- // set Billing Address
- $billing = $customer->getDefaultBillingAddress();
- $billingAddress = Mage::getModel('sales/order_address')
- ->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 = $customer->getDefaultShippingAddress();
- $shippingAddress = Mage::getModel('sales/order_address')
- ->setStoreId($storeId)
- ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
- ->setCustomerId($customer->getId())
- ->setCustomerAddressId($customer->getDefaultShipping())
- ->setCustomer_address_id($shipping->getEntityId())
- ->setPrefix($shipping->getPrefix())
- ->setFirstname($shipping->getFirstname())
- ->setMiddlename($shipping->getMiddlename())
- ->setLastname($shipping->getLastname())
- ->setSuffix($shipping->getSuffix())
- ->setCompany($shipping->getCompany())
- ->setStreet($shipping->getStreet())
- ->setCity($shipping->getCity())
- ->setCountry_id($shipping->getCountryId())
- ->setRegion($shipping->getRegion())
- ->setRegion_id($shipping->getRegionId())
- ->setPostcode($shipping->getPostcode())
- ->setTelephone($shipping->getTelephone())
- ->setFax($shipping->getFax());
- $order->setShippingAddress($shippingAddress)
- ->setShipping_method('flatrate_flatrate');
- /*->setShippingDescription($this->getCarrierName('flatrate'));*/
- /*some error i am getting here need to solve further*/
- //you can set your payment method name here as per your need
- $orderPayment = Mage::getModel('sales/order_payment')
- ->setStoreId($storeId)
- ->setCustomerPaymentId(0)
- ->setMethod('purchaseorder')
- ->setPo_number(' – ');
- $order->setPayment($orderPayment);
- // let say, we have 1 product
- //check that your products exists
- //need to add code for configurable products if any
- $subTotal = 0;
- $products = array(
- '1' => array(
- 'qty' => 2
- )
- );
- foreach ($products as $productId=>$product) {
- $_product = Mage::getModel('catalog/product')->load($productId);
- $rowTotal = $_product->getPrice() * $product['qty'];
- $orderItem = Mage::getModel('sales/order_item')
- ->setStoreId($storeId)
- ->setQuoteItemId(0)
- ->setQuoteParentItemId(NULL)
- ->setProductId($productId)
- ->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();
- <span style="font-size:12px;">$customer = Mage::getModel('customer/customer');
- $password = 'test1234';
- $email = 'dtest@gmail.com<script type="text/javascript">
- /* <![CDATA[ */
- (function(){try{var s,a,i,j,r,c,l=document.getElementById("__cf_email__");a=l.className;if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
- /* ]]> */
- </script>';
- $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
- $customer->loadByEmail($email);
- if(!$customer->getId()) {
- $groups = Mage::getResourceModel('customer/group_collection')->getData();
- $groupID = '3';
- $customer->setData( 'group_id', $groupID );
- $customer->setEmail($email);
- $customer->setFirstname('test');
- $customer->setLastname('testing');
- $customer->setPassword($password);
- $customer->setConfirmation(null);
- $customer->save();
- echo $customer->getId();
- }</span>
创建invoice
- $order = Mage::getModel('sales/order')->loadByIncrementId('100000001');
- try {
- if(!$order->canInvoice())
- {
- Mage::throwException(Mage::helper('core')->__('Cannot create an invoice.'));
- }
- $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
- if (!$invoice->getTotalQty()) {
- Mage::throwException(Mage::helper('core')->__('Cannot create an invoice without products.'));
- }
- $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
- //Or you can use
- //$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
- $invoice->register();
- $transactionSave = Mage::getModel('core/resource_transaction')
- ->addObject($invoice)
- ->addObject($invoice->getOrder());
- $transactionSave->save();
- }
- catch (Mage_Core_Exception $e) {
- }
创建shipment
- $order = Mage::getModel('sales/order')->loadByIncrementId('100000001');
- try {
- if($order->canShip()) {
- //Create shipment
- $shipmentid = Mage::getModel('sales/order_shipment_api')
- ->create($order->getIncrementId(), array());
- //Add tracking information
- $ship = Mage::getModel('sales/order_shipment_api')
- ->addTrack($order->getIncrementId(), array());
- }
- }catch (Mage_Core_Exception $e) {
- print_r($e);
- }
- $order = Mage::getModel('sales/order')->load('100000001', 'increment_id');
- if (!$order->getId()) {
- $this->_fault('order_not_exists');
- }
- if (!$order->canCreditmemo()) {
- $this->_fault('cannot_create_creditmemo');
- }
- $data = array();
- $service = Mage::getModel('sales/service_order', $order);
- $creditmemo = $service->prepareCreditmemo($data);
- // refund to Store Credit
- if ($refundToStoreCreditAmount) {
- // check if refund to Store Credit is available
- if ($order->getCustomerIsGuest()) {
- $this->_fault('cannot_refund_to_storecredit');
- }
- $refundToStoreCreditAmount = max(
- 0,
- min($creditmemo->getBaseCustomerBalanceReturnMax(), $refundToStoreCreditAmount)
- );
- if ($refundToStoreCreditAmount) {
- $refundToStoreCreditAmount = $creditmemo->getStore()->roundPrice($refundToStoreCreditAmount);
- $creditmemo->setBaseCustomerBalanceTotalRefunded($refundToStoreCreditAmount);
- $refundToStoreCreditAmount = $creditmemo->getStore()->roundPrice(
- $refundToStoreCreditAmount*$order->getStoreToOrderRate()
- );
- // this field can be used by customer balance observer
- $creditmemo->setBsCustomerBalTotalRefunded($refundToStoreCreditAmount);
- // setting flag to make actual refund to customer balance after credit memo save
- $creditmemo->setCustomerBalanceRefundFlag(true);
- }
- }
- $creditmemo->setPaymentRefundDisallowed(true)->register();
- // add comment to creditmemo
- if (!empty($comment)) {
- $creditmemo->addComment($comment, $notifyCustomer);
- }
- try {
- Mage::getModel('core/resource_transaction')
- ->addObject($creditmemo)
- ->addObject($order)
- ->save();
- // send email notification
- $creditmemo->sendEmail($notifyCustomer, ($includeComment ? $comment : ''));
- } catch (Mage_Core_Exception $e) {
- $this->_fault('data_invalid', $e->getMessage());
- }
- echo $creditmemo->getIncrementId();