Skip to content

Commit 420ddcb

Browse files
committed
Fix issue where address extension attributes would be set as an array
Fixes magento/magento2#26682
1 parent 606c3e8 commit 420ddcb

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

app/code/Magento/Quote/Model/ShippingMethodManagement.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Magento\Quote\Api\Data\EstimateAddressInterface;
1919
use Magento\Quote\Api\ShipmentEstimationInterface;
2020
use Magento\Quote\Model\ResourceModel\Quote\Address as QuoteAddressResource;
21+
use Magento\Quote\Api\Data\AddressExtensionInterfaceFactory;
2122

2223
/**
2324
* Shipping method read service
@@ -56,6 +57,11 @@ class ShippingMethodManagement implements
5657
*/
5758
protected $totalsCollector;
5859

60+
/**
61+
* @var AddressExtensionInterfaceFactory
62+
*/
63+
protected $addressExtensionFactory;
64+
5965
/**
6066
* @var \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor
6167
*/
@@ -83,6 +89,7 @@ class ShippingMethodManagement implements
8389
* @param Cart\ShippingMethodConverter $converter
8490
* @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
8591
* @param Quote\TotalsCollector $totalsCollector
92+
* @param AddressExtensionInterfaceFactory $addressExtensionFactory
8693
* @param AddressInterfaceFactory|null $addressFactory
8794
* @param QuoteAddressResource|null $quoteAddressResource
8895
* @param CustomerSession|null $customerSession
@@ -92,6 +99,7 @@ public function __construct(
9299
Cart\ShippingMethodConverter $converter,
93100
\Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
94101
\Magento\Quote\Model\Quote\TotalsCollector $totalsCollector,
102+
AddressExtensionInterfaceFactory $addressExtensionFactory,
95103
AddressInterfaceFactory $addressFactory = null,
96104
QuoteAddressResource $quoteAddressResource = null,
97105
CustomerSession $customerSession = null
@@ -100,6 +108,7 @@ public function __construct(
100108
$this->converter = $converter;
101109
$this->addressRepository = $addressRepository;
102110
$this->totalsCollector = $totalsCollector;
111+
$this->addressExtensionFactory = $addressExtensionFactory;
103112
$this->addressFactory = $addressFactory ?: ObjectManager::getInstance()
104113
->get(AddressInterfaceFactory::class);
105114
$this->quoteAddressResource = $quoteAddressResource ?: ObjectManager::getInstance()
@@ -312,6 +321,14 @@ private function getShippingMethods(Quote $quote, $address)
312321
$shippingAddress->addData($this->extractAddressData($address));
313322
$shippingAddress->setCollectShippingRates(true);
314323

324+
$addressExtensionAttributes = $address->getExtensionAttributes();
325+
326+
if ($addressExtensionAttributes === null) {
327+
$addressExtensionAttributes = $this->addressExtensionFactory->create();
328+
}
329+
330+
$shippingAddress->setExtensionAttributes($addressExtensionAttributes);
331+
315332
$this->totalsCollector->collectAddressTotals($quote, $shippingAddress);
316333
$quoteCustomerGroupId = $quote->getCustomerGroupId();
317334
$customerGroupId = $this->customerSession->getCustomerGroupId();

0 commit comments

Comments
 (0)