Если я правильно анализирую ваш вопрос, вы говорите, что getQuote()->getBillingAddress()
получает платежный адрес клиента по умолчанию вместо нового адреса, введенного клиентом в заказе?
У меня есть эта проблема в Magento1.4.0.1. Я обошел его, получив все адреса от клиента и сравнив каждый атрибут с адресом, указанным в заказе, чтобы узнать действительный идентификатор объекта этого адреса.
Я скопировал это изМой код с некоторыми частями пользовательской бизнес-логики удален, так что считайте его непроверенным, но вы поняли:
(код протестирован только на Magento 1.4.0.1 и может не применяться к Magento 1.5)
$currentCustomer = Mage::getModel('customer/customer')->load($order['customer_id']);
$attributesToCompare = array('firstname', 'lastname', 'country_id', 'region', 'region_id', 'city', 'telephone', 'postcode', 'company', 'fax', 'prefix', 'middlename', 'suffix', 'street');
$orderAddresses = array(
'billing' => $order->getBillingAddress()->getData(),
'shipping' => $order->getShippingAddress()->getData()
);
$foundExistingCustomerAddressEntityId = array(
'billing' => false,
'shipping' => false
);
$billingSameAsShipping = false;
$currentCustomerAddresses = $currentCustomer->getAddressesCollection();
// is the billing/shipping address currently found in the customer's address book?
foreach ($orderAddresses as $orderAddressKey => $orderAddress) {
//var_dump($orderAddress);
foreach ($currentCustomerAddresses as $currentCustomerAddressObj) {
$currentCustomerAddress = $currentCustomerAddressObj->getData();
$attributesMatchCount = 0;
foreach ($attributesToCompare as $attributeToCompare) {
if (empty($currentCustomerAddress[$attributeToCompare])) {
$currentCustomerAddress[$attributeToCompare] = false;
}
$attributesMatchCount += ($orderAddress[$attributeToCompare] == $currentCustomerAddress[$attributeToCompare])?1:0;
//echo 'attributesMatchCount: '.$attributesMatchCount." {$orderAddress[$attributeToCompare]} {$currentCustomerAddress[$attributeToCompare]}\n";
}
if ($attributesMatchCount == count($attributesToCompare)) {
$foundExistingCustomerAddressEntityId[$orderAddressKey] = $currentCustomerAddress['entity_id'];
//echo 'foundExistingCustomerAddressEntityId['.$orderAddressKey.']: '.$foundExistingCustomerAddressEntityId[$orderAddressKey]."\n\n";
break;
}
}
}
$billingShippingExactMatchCount = 0;
foreach ($attributesToCompare as $attributeToCompare) {
$billingShippingExactMatchCount += ($orderAddresses['billing'][$attributeToCompare] == $orderAddresses['shipping'][$attributeToCompare])?1:0;
}
if ($billingShippingExactMatchCount == count($attributesToCompare)) {
$billingSameAsShipping = true;
}