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 довольно просты, когда дело доходит до ООП.

Заранее благодарю

Author: diazwatson, 2017-08-11

2 answers

Вы можете получить платежную информацию следующим способом,

$billing = $orderData->getBillingAddress();
echo "<pre>";print_r($billing->getData());
 0
Author: Rakesh Jesadiya, 2017-08-11 10:53:54

Прежде всего, я бы не рекомендовал использовать 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;
    }

Потому что, если вы этого не сделаете, вы предотвратите выполнение всех плагинов, следующих в цепочке, и вызов исходного метода.

Некоторые связанные ссылки

 2
Author: diazwatson, 2017-08-11 11:43:47