Intereting Posts

Как получить идентификатор адреса доставки / биллинга заказа за пределами API-интерфейса Magento?

Я хочу получить идентификатор адреса доставки / биллинга из только что выполненного заказа Magento.

Я пробовал следующий код, но он не работал:

Mage :: getModel ( 'продаж / заказ') -> нагрузки ($ array_data [ "order_id"]) -> getShippingAddressId ()

Есть ли у кого-нибудь идеи?

Solutions Collecting From Web of "Как получить идентификатор адреса доставки / биллинга заказа за пределами API-интерфейса Magento?"

Следующие могут помочь кому-то искать аналогичное решение:

// Get the id of the last order for the current user(session) $orderId = Mage::getSingleton('checkout/session')->getLastOrderId(); // If an order actually exists if ($orderId) { //Get the order details based on the order id ($orderId) $order = Mage::getModel('sales/order')->load($orderId); // Get the id of the orders shipping address $shippingId = $order->getShippingAddress()->getId(); // Get shipping address data using the id $address = Mage::getModel('sales/order_address')->load($shippingId); // Display the shipping address data array on screen var_dump($address); } 

Примечание. Очевидно, что это решение требует, чтобы пользователь имел текущий сеанс

Удачи.

Во-первых, разбейте свой прикованный вызов, чтобы убедиться, что вы действительно загружаете заказ с помощью

 $order = Mage::getModel('sales/order')->load($array_data["order_id"]); var_dump($order->getData()); 

Предполагая, что вы загрузили заказ, посмотрите на значения, сброшенные выше. Нет shipping_address_id . Это, в сочетании с отсутствием метода getShippingAddressId на Mage_Sales_Model_Order , почему ваш код не работает.

Пытаться

 $order = Mage::getModel('sales/order')->load($array_data["order_id"]); $id = $order->getShippingAddress()->getId(); 

getShippingAddress адреса getShippingAddress возвращает объект адреса, который вы можете проверить для своего идентификатора. Если вы посмотрите на определение класса Mage_Sales_Model_Order , вы можете увидеть определения методов

 //magento 1.4 public function getShippingAddress() { foreach ($this->getAddressesCollection() as $address) { if ($address->getAddressType()=='shipping' && !$address->isDeleted()) { return $address; } } return false; } public function getAddressesCollection() { if (is_null($this->_addresses)) { $this->_addresses = Mage::getResourceModel('sales/order_address_collection') ->addAttributeToSelect('*') ->setOrderFilter($this->getId()); if ($this->getId()) { foreach ($this->_addresses as $address) { $address->setOrder($this); } } } return $this->_addresses; } 

TL, DR для вышеуказанного кода, идентификаторы адресов не сохраняются с моделью заказов. Адреса для всех заказов хранятся как объект sales/order_address или Mage_Sales_Model_Order_Address .

После бесчисленных отладочных и поисковых запросов я решил:

Для инкрементного идентификатора адреса адреса, основанного на заказе,

 $order_id=Mage::getSingleton('checkout/session')->getLastRealOrderId(); $sales_order=Mage::getModel('sales/order')->load($order_id); $billing_address_id=$sales_order->billing_address_id; $shipping_address_id=$sales_order->shipping_address_id; 

Для идентификатора объекта адреса заказа, основанного на клиенте,

 $quote = Mage::getSingleton('checkout/session')->getQuote(); $billing_address_id=$quote->getBillingAddress()->customer_address_id; $shipping_address_id=$quote->getShippingAddress()->customer_address_id; 

Попробуйте это, вы можете получить shipping_address_id и billing_address_id

 $orderCollection = Mage::getResourceModel('sales/order_collection') ->addAttributeToSelect('*') ->addAttributeToFilter('main_table.customer_id',$session->getId()); echo "<pre>"; foreach ($orderCollection as $order){ $shippingAddress = Mage::getModel('sales/order_address')->load($order->getShippingAddressId()); $billingAddress = Mage::getModel('sales/order_address')->load($order->getBillingAddressId()); print_r($order->getData()); print_r($shippingAddress->getData()); print_r($billingAddress->getData()); } 
 $order = Mage::getModel('sales/order')->load($orderId); //Get shipping address Id $order->getShippingAddress()->getId(); //format output echo $order->getShippingAddress()->format('html'); //Get shipping address data print_r($order->getShippingAddress()->getData());