Magento 2 - 在结帐会话中通过送货地址获取客户地址ID



我在获取客户地址 ID 时遇到问题,因为它返回空值。

这是我尝试过的:

$checkout = $this->_sessionCheckout->getQuote();
if ($checkout) {
$shippingAddress = $checkout->getShippingAddress();
if ($shippingAddress) {
$addressId = $shippingAddress->getCustomerAddressId();
$this->_logger->log(100, print_r('address Id: ' . $addressId , true)); //Returns null 
/** @var MagentoCustomerApiDataAddressInterface $address */
$address = $this->_addressRepository->getById($addressId);
$address->setCity($city_name);
$this->_addressRepository->save($address);
}

我只需要获取客户地址ID即可更新城市。我不知道为什么它返回一个空值。


编辑的详细信息:

下图显示了保存的送货地址:

送货地址

我想知道的是如何知道每个送货地址的客户地址ID。所以我可以修改我想要的任何细节。

当您以访客用户身份下订单时,您必须在结帐页面上添加送货地址,那时不会有客户参考对象,因此您将获得客户地址 Id 的值为 null。

当您以注册客户身份下订单时,您应该有默认的送货地址,然后只有您可以获得客户地址 ID 的值。

发生这种情况是因为customer_address_id是对customer_address表的引用,customer_address表是对customer_entity表的引用。

您可以按如下方式获取订单 如果要在何处调用此信息,请在构造函数中添加以下内容(如果尚未使用)。

protected $checkoutSession;
public function __construct(
MagentoCheckoutModelSession $checkoutSession,
PsrLogLoggerInterface $logger
)
{

$this->checkoutSession = $checkoutSession;
$this->logger = $logger;
}

$order = $session->getLastRealOrder();
$orderdata = $order->getData();
$shipping_address_id = $orderdata['shipping_address_ID'];

此地址是付款时选择的最终送货地址 结帐流程的阶段。

最新更新