Оформление заказа – доля в экзамене: 16%.
Magento использует модель квот для хранения информации о заказе, прежде чем клиент завершит его. Сюда входит:
Платежный адрес и адрес для доставки используют одну модель Mage_Sales_Model_Quote_Address. Тип адреса устанавливается в качестве поля в модели.
Адрес доставки (или платежный адрес, если продукт является виртуальным или загружаемым) используется для расчета общей суммы заказа и доступных способов доставки.
В конце процесса оформления заказа выполняется полное квотирование и превращается в заказ.
Добавление квот
Модель Корзины используется для манипулирования (добавление, удаление и обновление) элементов в квотах. Она выполняет дополнительную проверку, например установка минимального количества заказов для позиции, когда она добавляется в корзину.
Когда товар добавляется в корзину, вызывается метод _prepareProduct(), чтобы подготовить данные товара для хранения в квоте. Для простых товаров загружаются все данные товара в модель (включая варианты товара, которые хранятся в таблице sales_flat_quote_item_option). Сгруппированный товар, например, загружает данные всех связанных товаров.
Для получения информации о товаре, например, специальных и настраиваемых параметров, он превращается в объект Mage_Sales_Quote_Item_Option и сохраняется в базе данных в таблице sales_flat_quote_item_option.
Квоты в базе данных
Квоты сохраняются в базе данных. Большинство хранится в таблице sales_flat_quote, но более сложная информация сохраняется в дополнительных таблицах, которые ссылаются на начальную квоту.
Параметры потока оформления заказа
По умолчанию предусмотрено два варианта оформления заказа: одностраничный и с мульти-доставкой. В мульти-доставке товарные позиции добавляются к каждому адресу доставки (хотя виртуальные элементы добавляются к адресу оплаты), а не в конце оформления заказа для каждого адреса. Это отражается в базе данных, где эти позиции сохраняются в таблице sales_flat_quote_address_item, тогда как квоты одностраничного заказа в таблице sales_flat_quote_item.
Мульти-доставка использует отдельный контроллер Mage_Checkout_MultishippingController и индивидуальный тип оформления заказа Mage_Checkout_Model_Type_Mulitishipping. Кроме того, она повторно использует много тех же моделей, и обычный заказ. Чтобы настроить или расширить мульти-доставку, эти два класса должны быть расширены и изменены.
В мульти-доставке виртуальные элементы добавляются к платежному адресу (вместо одного из адресов доставки), поскольку виртуальная квота будет содержать позиции только для платежного адреса. Квоты с виртуальными позициями создают дополнительный заказ с платежным адресом, который содержит эти элементы.
Сгруппированные товары добавляются в корзину как несколько отдельных товаров, поэтому их можно выбирать для доставки на различные адреса, используя регулярный процесс мульти-доставки. Однако связанные товары (bundled) нельзя разделить между несколькими адресами.
Итоги (totals)
Квоты позиций, ценовые правила корзины и расходы на доставку составляют общую стоимость квоты.
Платежные адреса и адреса доставки также влияют на общую сумму, так как они используются для определения налоговых ставок, способов доставки и способов оплаты.
В моделях итога отслеживается стоимость заказа или квоты. Каждый из итогов имеет код, который связан с ним, который может быть использован для его получения и обработки. Модели итога обрабатывают адрес, чтобы добавить в коллекцию итоги для него. С помощью адреса модели получают доступ к квоте и квотам позиций.
Эти модели можно перезаписать или можно добавить новые модели итога, расширив модель Mage_Sales_Quote_Address_Total_Abstract и зарегистрировав ее в config.xml.
<config>
<global>
<sales>
<quote>
<totals>
<{code}>
<class>{grouped_class_name}</class>
<before>{csv_other_totals}</before>
<after>{csv_other_totals}</after>
</{code}>
</totals>
</quote>
</sales>
</global>
</config>
Приоритет выполнения модели итога можно настроить с помощью элементов <before> и <after> в определении итога (totals). Однако порядок выполнения заказа по умолчанию таков:
Этот процесс управляется моделью Mage_Sales_Model_Quote_Address_Total_Collector, которая вызывается из адреса, используя метод collectTotals(). Этот метод вызывается каждый раз, когда квота обновляется, например, на каждом этапе оформления заказа. Этот метод также направляет события _collect_totals_before и _collect_totals_after.
Авторизация и зачисление платежей
Авторизация карты и зачисление происходят при размещении заказа ($order->place()), возникающего при сохранении заказа. В зависимости от способа оплаты, авторизация может быть зарезервирована в настоящее время, а затем происходит зачисление после создания счета-фактуры.
Снижение количества позиций на складе
Для одностраничного заказа (onepage checkout) количество на складе уменьшается с помощью наблюдателя Mage_CatalogInventory для события sales_model_service_quote_submit_before. Это событие отправляется непосредственно перед заказом и событием checkout_submit_all_after, которое срабатывает в конце одностраничного заказа (наблюдатель имеет определенные проверки, чтобы предотвратить двукратное уменьшение), а также после того, как все заказы были созданы в мульти-доставке.
Ценовые правила для корзины применяют скидки, и они могут принимать набор условий, при которых они срабатывают. Эта функциональность обеспечивается модулем Mage_SalesRule.
В отличие от ценовых правил каталога, ценовые правила корзины применяют изменения цены (скидки) на основе информации в квоте, например, группы клиентов, промо-кода, а не на основе товара или категории.
Ограничение ценовых правил корзины включают:
В Magento способы доставки расширяют модель Mage_Shipping_Model_Carrier_Abstract и зарегистрированы в конфигурации магазина со значениями по умолчанию (и статической конфигурацией типа названий моделей), установленные в файле config.xml.
<config>
<default>
<carriers>
<{code}>
<active>{0|1}</active>
<sallowspecific>{0|1}</sallowspecific>
<model>{grouped_class_name}</model>
<name>{name}</name>
<title>{title}</title>
...
</{code}>
</carriers>
</default>
</config>
Методы доставки называются перевозчиками (carriers), поскольку они определяют способ доставки, например, как Royal Mail или FedEx, и могут предложить несколько ставок в рамках этого метода, например, Стандартная или Доставка на следующий день.
Существующие способы доставки, которые предоставлены Magento, могут быть настроены путем перезаписи их модели.
Расчет стоимости доставки
Расчет стоимости доставки осуществляется в квоте Адреса (requestShippingRates()), которая создает запрос, содержащий все соответствующие данные, такие как пункт назначения и вес упаковки и вызывает метод Mage_Shipping_Model_Shipping::collectRates($request). Он обрабатывает через цикл всех доступных перевозчиков, проверяет запрос и вызывает метод collectRates($request) для каждого из них, чтобы получить имеющиеся ставки.
Таблица ставок (TableRates)
Метод доставки TableRate позволяет создавать набор правил, указанных в формате csv, для установления цены доставки, которая зависит от места назначения и стоимости заказа, веса или количества позиций. Используемый коэффициент устанавливается на уровне магазина и должен задействоваться для магазина, например, правила цены и веса нельзя смешивать на уровне магазина.
Способы доставки в США
Некоторые перевозчики обращаются с запросом к посторонним службам, чтобы получить предлагаемые тарифы. FedEX, IPS и USPS расширяют модель Mage_Usa_Model_Shipping_Carrier_Abstract и получают свои тарифы с помощью HTTP или SOAP-запросов.
Методы оплаты в Magento расширяют модель Mage_Payment_Model_Method_Abstract, и, как и способы доставки регистрируются с помощью конфигурации магазина со значениями по умолчанию (и дополнительной конфигурацией), установленными в config.xml.
<config>
<default>
<payment>
<{name}>
<active>{0|1}</active>
<model>{grouped_class_name}</model>
<order_status>{order_state}</order_status>
<title>{title}</title>
<allowspecific>{0|1}</allowspecific>
<sort_order>{sort_order}</sort_order>
<group>{group}</group>
<payment_action>{action}</payment_action>
...
</{name}>
</payment>
</default>
</config>
Большинство параметров способа оплаты, как правило, можно настроить в Конфигурации системы или манипулируя значениями по умолчанию в config.xml. Например, действие платежа по умолчанию, как правило, определяется в поле <payment_action>. Если нужно более глубокая настройка, могут быть перезаписаны модели метода оплаты.
Информация о платеже добавляется к методам с использованием метода Mage_Sales_Model_Quote_Payment::importData($data) и вызывается методом savePayment() в одностраничном заказе. Он посылает событие sales_quote_payment_import_data_before перед вызовом метода assignData($data) в модели метода оплаты. Наблюдая это событие, данные могут быть изменены, прежде чем они будут сохранены в методе.
Методы оплаты реализуют логику конкретного способа оплаты, например, с помощью кредитных карт. Между тем, платежные модели управляют методами оплаты через квоту или заказ и обрабатывают операции, связанные с оплатой, такие как зачисление или возмещение.
Модули методов оплаты обычно содержат несколько блоков для отображения платежных форм на странице оформления заказа, например, формы для кредитных карт, а также контроллеры для обработки переадресации на любые платежные шлюзы.
Платежные соглашения встроены в движке Magento. Методы оплаты устанавливают идентификатор платежного соглашения для объекта оплаты с помощью:
$order->getPayment()->setBillingAgreementData($data);
Перевод: SebWeo
В нашем путешествии по миру сокетов мы начали с "верхнего этажа" — WebSocket в браузере,…
В предыдущей статье мы говорили о WebSockets — технологии, позволяющей создавать интерактивные чаты в браузере.…
Кожа младенца – тонкая и нежная. Еще не справляется с защитой организма от внешних факторов.…
Представьте себе телефонный разговор. Вы звоните другу, он поднимает трубку, и вы можете говорить одновременно,…
Долгое время планшеты воспринимались исключительно как устройства для потребления контента: посмотреть YouTube, полистать ленту новостей…
Вы внесли правки в CSS, исправили критический баг в JavaScript, загрузили файлы на сервер и…