Czasami musimy programowo tworzyć zamówienia w Magento. Załóżmy, że tworzysz wtyczkę Magento do swojego sklepu, aby połączyć ją z rynkiem, takim jak Walmart lub Etsy.
Kroki związane z tworzeniem zamówienia:
- Określimy dane klienta, takie jak imię, nazwisko, e-mail.
- Określ adres wysyłki i rozliczenia klienta.
- Zdefiniuj sposób wysyłki i płatności klienta.
- Zdefiniuj produkt i ilość, którą należy zamówić w naszym sklepie Magento.
- Utwórz klienta, jeśli klient nie istnieje w naszym sklepie Magento. To opcjonalny krok.
- Dodaj produkt do oferty klienta.
- Dodaj adres wysyłki i faktury do oferty klienta.
- Przygotuj i zapisz wycenę klienta.
- Zamówienie jest tworzone w Twoim sklepie Magento.
Posługiwać się
$ _store = Mage :: app () -> getStore (); $ _website = Mage :: app () -> getWebsite (); $ _firstName = John '; $ _lastName = 'doe; $ _email = 'demo@demo.com'; / * * Niestandardowy adres rozliczeniowy * / $ billingAddress = array ('customer_address_id' => '', 'prefix' => '', 'firstname' => $ _firstName, 'middlename' => '', 'lastname' => $ _lastName, 'suffix' => '', 'company' => '', 'street' => array ('0' => 'Sector 63', // Wymagane '1' => 'Noida, UP') , 'city' => 'Noida', 'country_id' => 'IN', // Kod kraju 'region' => 'UP', 'region_id' => '', 'postcode' => '201301', ' telephone '=>' 888-888-8888 ',' fax '=>' ',' save_in_address_book '=> 1); / * * Niestandardowy adres wysyłki * / $ shippingAddress = array ('customer_address_id' => '', 'prefix' => '', 'firstname' => $ _firstName, 'middlename' => '', 'lastname' => $ _lastName, 'suffix' => '', 'company' => '', 'street' => array ('0' => 'Sector 63', // Wymagane '1' => 'Noida, UP') , 'city' => 'Noida', 'country_id' => 'IN', // Kod kraju 'region' => 'UP', 'region_id' => '', 'postcode' => '201301', ' telephone '=>' 888-888-8888 ',' fax '=>' ',' save_in_address_book '=> 1); / ** * Wprowadź metodę wysyłki, której chcesz użyć. Niektóre inne metody wysyłki * to tablerate_tablerate, freeshipping_freeshipping itp. * Tutaj używamy flatrate_flatrate * / $ _shippingMethod = 'flatrate_flatrate'; / ** * Wprowadź metodę płatności, której chcesz użyć. Niektóre z metod płatności * to checkmo, darmowy, przelew bankowy, ccsave, zamówienie zakupu itp. * / $ _paymentMethod = 'cashondelivery'; / ** * Podaj tablicę produktów i ich ilość. * $ array = array (product_id => qty) * / $ productIds = array (905 => 1); $ quote = Mage :: getModel ('sales / quote') -> setStoreId ($ _ store-> getId ()); $ quote-> setCurrency (Mage :: app () -> getStore () -> getBaseCurrencyCode ()); $ customer = Mage :: getModel ('customer / customer') -> setWebsiteId ($ _ website-> getId ()) -> loadByEmail ($ _ email); / ** * Przygotowanie klienta do wyceny * jeśli klient nie jest zarejestrowany, utworzymy nowego klienta. To jest * opcjonalny proces. * / if (! $ customer-> getId ()) {$ customer = Mage :: getModel („klient / klient”); $ customer-> setWebsiteId ($ _ website-> getId ()) -> setStore ($ _ store) -> setFirstname ($ _ firstName) -> setLastname ($ _ lastName) -> setEmail ($ _ email); / ** * Tworzenie nowego klienta * Pomiń próbę, jeśli nie chcesz tworzyć nowego klienta. * / try {// Generowanie hasła dla klienta. Możesz również użyć dowolnego niestandardowego hasła //. $_store = Mage::app()->getStore();
$_website = Mage::app()->getWebsite();
$_firstName = John';
$_lastName = 'doe;
$_email = 'demo@demo.com';
/*
* Custom billing address
*/
$billingAddress = array(
'customer_address_id' => '',
'prefix' => '',
'firstname' => $_firstName,
'middlename' => '',
'lastname' => $_lastName,
'suffix' => '',
'company' => '',
'street' => array(
'0' => 'Sector 63', // Required
'1' => 'Noida, UP'
),
'city' => 'Noida',
'country_id' => 'IN', // Country code
'region' => 'UP',
'region_id' => '',
'postcode' => '201301',
'telephone' => '888-888-8888',
'fax' => '',
'save_in_address_book' => 1
);
/*
* Custom shipping address
*/
$shippingAddress = array(
'customer_address_id' => '',
'prefix' => '',
'firstname' => $_firstName,
'middlename' => '',
'lastname' => $_lastName,
'suffix' => '',
'company' => '',
'street' => array(
'0' => 'Sector 63', // Required
'1' => 'Noida, UP'
),
'city' => 'Noida',
'country_id' => 'IN', // Country code
'region' => 'UP',
'region_id' => '',
'postcode' => '201301',
'telephone' => '888-888-8888',
'fax' => '',
'save_in_address_book' => 1
);
/**
* Enter the shipping method you want to use. Some of the other shipping
* methods are tablerate_tablerate, freeshipping_freeshipping etc.
* Here we are using flatrate_flatrate
*/
$_shippingMethod = 'flatrate_flatrate';
/**
* Enter the payment method you want to use. Some of the order payment
*methods are checkmo, free, banktransfer, ccsave, purchaseorder etc.
*/
$_paymentMethod = 'cashondelivery';
/**
* Provide array of product and their qty.
* $array = array(product_id => qty)
*/
$productIds = array(905 => 1);
$quote = Mage::getModel('sales/quote')
->setStoreId($_store->getId());
$quote->setCurrency(Mage::app()->getStore()->getBaseCurrencyCode());
$customer = Mage::getModel('customer/customer')
->setWebsiteId($_website->getId())
->loadByEmail($_email);
/**
* Preparing customer for the quote
* if the customer is not registered then we will create a new customer. This is *an optional process.
*/
if (!$customer->getId()) {
$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId($_website->getId())
->setStore($_store)
->setFirstname($_firstName)
->setLastname($_lastName)
->setEmail($_email);
/**
* Creating new customer
* Skip try-catch if you don't want to create a new customer.
*/
try {
// Generating password for customer. You can also use any custom // password for it.
$password = $customer->generatePassword();
$customer->setPassword($password);
$customer->setForceConfirmed(true);
$customer->save();
$customer->setConfirmation(null);
$customer->save();
$customerId = $customer->getId();
$customAddress = Mage::getModel('customer/address');
$customAddress->setData($billingAddress)
->setCustomerId($customerId)
->setIsDefaultBilling('1')
->setIsDefaultShipping('1')
->setSaveInAddressBook('1');
$customAddress->save();
} catch (Mage_Core_Exception $e) {
Mage::getSingleton('customer/session')->addException($e, $this- >__('Error in creating customer'));
Mage::logException($e);
} catch (Exception $e) {
Mage::getSingleton('customer/session')->addException($e, $this- >__('Error in creating customer'));
Mage::logException($e);
}
}
// Assign customer to quote
$quote->assignCustomer($customer);
// Add products to quote
foreach ($productIds as $productId => $qty) {
$product = Mage::getModel('catalog/product')->load($productId);
$quote->addProduct($product, $qty);
}
// Add billing address to quote
$_billingAddressData = $quote->getBillingAddress()- >addData($billingAddress);
// Add shipping address to quote
$_shippingAddressData = $quote->getShippingAddress()- >addData($shippingAddress);
/**
* If the customer is a registered customer then you can fetch their billing or *shipping address as below
*
* $_customerBillingAddress = $customer->getPrimaryBillingAddress();
* $_customerShippingAddress = $customer->getPrimaryShippingAddress();
*
* $_billingAddressData = $quote->getBillingAddress()- >addData($_customerBillingAddress);
* $_shippingAddressData = $quote->getShippingAddress()- >addData($_customerShippingAddress);
*/
// Collect shipping rates on quote shipping address data
$_shippingAddressData->setCollectShippingRates(true)
->collectShippingRates();
// Set shipping and payment method on quote shipping address data
$_shippingAddressData->setShippingMethod($_shippingMethod)
->setPaymentMethod($_paymentMethod);
// Set payment method for the quote
$quote->getPayment()->importData(array('method' => $_paymentMethod));
try {
$quote->collectTotals();
$quote->save();
// Preparing Order From Quote
$service = Mage::getModel('sales/service_quote', $quote);
$service->submitAll();
// $incrementId is the increment id of the order created.
$incrementId = $service->getOrder()->getRealOrderId();
Mage::getSingleton('checkout/session')
->setLastQuoteId($quote->getId())
->setLastSuccessQuoteId($quote->getId())
->clearHelperData();
/*
* $response is the Array of the response with the status of the order creation.
*/
$response['success'] = true;
$response['error'] = false;
$response['messages'] = 'Order number '.$incrementId.' created successfully.';
} catch (Mage_Core_Exception $e) {
$response['success'] = false;
$response['error'] = true;
$response['messages'] = $e->getMessage();
Mage::logException($e);
} catch (Exception $e) {
$response['success'] = false;
$response['error'] = true;
$response['messages'] = $this->__('Error in processing order. Please try again later.');
Mage::logException($e);
}
Mage::app()->getResponse()->setBody(Mage::helper('core')- >jsonEncode($response)); $ incrementId = $ service-> getOrder () -> getRealOrderId (); Mage :: getSingleton ('checkout / session') -> setLastQuoteId ($ quote-> getId ()) -> setLastSuccessQuoteId ($ quote-> getId ()) -> clearHelperData (); / * * $ odpowiedzią jest tablica odpowiedzi ze statusem tworzenia zamówienia. * / $ response ['success'] = true; $ response ['error'] = false; $ response ['messages'] = 'Numer zamówienia'. $ incrementId. ' stworzony pomyślnie. ”; } catch (Mage_Core_Exception $ e) {$ response ['success'] = false; $ response ['error'] = true; $ response ['messages'] = $ e-> getMessage (); Mage :: logException ($ e); } catch (Exception $ e) {$ response ['success'] = false; $ response ['error'] = true; $ response ['messages'] = $ this -> __ ('Błąd w kolejności przetwarzania. Spróbuj ponownie później.'); Mage :: logException ($ e); } Mage :: app () -> getResponse () -> setBody (Mage :: helper ('core') -> jsonEncode ($ response));
Proszę przejść przez wyżej wspomniany kod