使用Observer在下订单之前/之后更新类似于账单地址的发货地址



简介:我使用的是"Magestore giftoucher"模块,在下订单时,默认情况下不会保存发货地址(仅限礼品卡产品)。由于礼券不是实物产品,因此未发货。它通过电子邮件发送给收件人。但不知何故,我想使发货地址类似于帐单地址。

所以我尝试过:在app/code/local/Magestore/Giftcoker/Model/Observer.php 下

在函数:->orderSaveAfter中,我写了下面的代码,但没想到它不起作用。

        $order = $observer->getEvent()->getOrder(); 
        $billing_address = $order->getBillingAddress();
        $shippingAddress = Mage::getModel('sales/order_address')
        ->setCustomerId($billing_address->getCustomerId())
        ->setCustomerAddressId($billing_address->getCustomerAddressId())
        ->setFirstname($billing_address->getFirstname())
        ->setMiddlename($billing_address->getMiddlename())
        ->setLastname($billing_address->getLastname())
        ->setSuffix($billing_address->getSuffix())
        ->setCompany($billing_address->getCompany())
        ->setStreet($billing_address->getStreet())
        ->setCity($billing_address->getCity())
        ->setCountry_id($billing_address->getCountryId())
        ->setRegion($billing_address->getRegion())
        ->setRegion_id($billing_address->getRegionId())
        ->setPostcode($billing_address->getPostcode())
        ->setTelephone($billing_address->getTelephone())
        ->setFax($billing_address->getFax());
        $order = Mage::getModel('sales/order')->load($order->getId());
        $order->setShippingAddress($shippingAddress);
        $order->save();

请说明这里出了什么问题!感谢

you need to add code in sales_order_place_before event
public function orderPlaceBefore($observer) {
    $order = $observer->getEvent()->getOrder();
    $billing_address = $order->getBillingAddress();
    $shippingAddress = Mage::getModel('sales/order_address')
        ->setCustomerId($billing_address->getCustomerId())
        ->setCustomerAddressId($billing_address->getCustomerAddressId())
        ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
        ->setFirstname($billing_address->getFirstname())
        ->setMiddlename($billing_address->getMiddlename())
        ->setLastname($billing_address->getLastname())
        ->setSuffix($billing_address->getSuffix())
        ->setCompany($billing_address->getCompany())
        ->setStreet($billing_address->getStreet())
        ->setCity($billing_address->getCity())
        ->setCountry_id($billing_address->getCountryId())
        ->setRegion($billing_address->getRegion())
        ->setRegion_id($billing_address->getRegionId())
        ->setPostcode($billing_address->getPostcode())
        ->setTelephone($billing_address->getTelephone())
        ->setFax($billing_address->getFax());
    $order->setShippingAddress($shippingAddress);

}

最新更新