Magento 2.1: Как получить адрес для выставления счетов гостя на success.phtml
Мне нужно получить гостевой платежный адрес на success.phml, чтобы я мог отправить его стороннему приложению.
Мне удалось использовать это:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orderData = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($block->getOrderId());
echo "<pre>";
print_r($orderData->getData());
echo "</pre>";
echo $orderData->getData('customer_email');
Но платежный адрес пуст - поэтому я предполагаю, что адреса из приведенного выше кода предназначены только для зарегистрированных клиентов или клиентов, которые зарегистрировали по крайней мере адрес.
Итак, мой вопрос в том, как мне получить адрес/данные гостя?
Он должен быть в состоянии быть извлечен, как его на странице "оформление заказа/#оплата"
Мои знания PHP довольно просты, когда дело доходит до ООП.
Заранее благодарю
2 answers
Вы можете получить платежную информацию следующим способом,
$billing = $orderData->getBillingAddress();
echo "<pre>";print_r($billing->getData());
Прежде всего, я бы не рекомендовал использовать ObjectManager, так как это считается плохой практикой.
Что касается вашего вопроса, и вместо того, чтобы использовать success.phtml для получения платежного адреса, вы можете использовать and observer или плагин для получения необходимой вам информации.
Подход наблюдателя
Создайте observer
для наблюдения за событием checkout_submit_all_after
.
Наблюдая за этим событием, вы получаете доступ к массиву с
['order' => $order, 'quote' => $quote]
Каждый раз, когда кто-то пытается разместить заказ. Затем вы можете использовать эти два объекта для размещения своей логики и извлечения информации, необходимой для отправки в стороннее приложение.
Подход к подключаемым модулям
Плагин в методе placeOrder
в классе \Magento\Quote\Model\QuoteManagement
.
Аналогично подходу наблюдателя, создав плагин around
этим методом вы получаете доступ к котировке и объекту заказа, который позже можно использовать для извлечения необходимой вам информации.
Важно: При использовании этого подхода не забудьте вызвать $proceed
, как показано ниже:
public function aroundPlaceOrder(QuoteManagement $subject, callable $proceed, $cartId, PaymentInterface $paymentMethod)
{
$this->doSmthBeforeProductIsSaved();
$returnValue = $proceed(); // <--- important
if ($returnValue) {
$this->postProductToFacebook();
}
return $returnValue;
}
Потому что, если вы этого не сделаете, вы предотвратите выполнение всех плагинов, следующих в цепочке, и вызов исходного метода.