【问题标题】:Magento update order shipping addressMagento 更新订单收货地址
【发布时间】:2013-07-26 13:23:40
【问题描述】:

在购买结束时,用户可以更改您的送货地址。我正在尝试更新此信息,但它不起作用。这是我的代码:

$customer = Mage::getModel('customer/session')->getCustomer();
$order = Mage::getSingleton('checkout/session')->getLastOrder();
$postData = Mage::app()->getRequest()->getPost();

$_new_address = array (
    'firstname' => $postData['nombre'],
    'lastname'  => $postData['apellidos'],
    'street'    => array ('0' => $postData['direccion']),
    'city'      => $postData['localidad'],
    'region_id' => $postData['provincia_id'],
    'region'    => '',
    'postcode'  => $postData['codigo_postal'],
    'country_id'=> 'ES',
    'telephone' => $postData['telefono']
);

$customAddress = Mage::getModel('customer/address');
$customAddress->setData($_new_address)
    ->setCustomerId($customer->getId())
    ->setIsDefaultBilling('1')
    ->setIsDefaultShipping('1')
    ->setSaveInAddressBook('1');

// Save address
try {
    $customAddress->save();
} catch (Exception $e) {
    Mage::getSingleton('core/session')->addError($e->getMessage());
    header('Location: /');
    exit;
}

// Update the order
try {
    $order->setShippingAddress($customAddress)->save();
} catch (Exception $e) {
    Mage::getSingleton('core/session')->addError($e->getMessage());
    header('Location: /');
    exit;
}

我可以更新订单还是不允许?谁能给我小费?

【问题讨论】:

    标签: php magento


    【解决方案1】:

    我的问题是订单中的帐单地址和送货地址与用户默认地址不同。

    最后代码如下:

    $order = Mage::getSingleton('checkout/session')->getLastOrder();
    
    $postData = Mage::app()->getRequest()->getPost();
    
    // Try to get shipping and billing address data.
    $orderShippingAddress = $order->getShippingAddress()->getId();
    $orderShipping = Mage::getModel('sales/order_address')->load($orderShippingAddress);
    
    $orderBillingAddress = $order->getBillingAddress()->getId();
    $orderBilling = Mage::getModel('sales/order_address')->load($orderBillingAddress);
    
    // Updating data.
    $orderShipping->addData($postData);
    $orderBilling->addData($postData);
    
    try {
        $orderShipping->implodeStreetAddress()->save();
        $orderBilling->implodeStreetAddress()->save();
    } catch (Exception $e) {
        Mage::logException($e);
        Mage::getSingleton('core/session')->addError($e->getMessage());
        header('Location: /after/success/envio');
        exit;
    }
    

    现在,它可以工作了。感谢您的帮助@R.S

    【讨论】:

      【解决方案2】:

      假设您要更新订单的送货地址,请查看/app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php 中的@addressSaveAction()

      $order = Mage::getSingleton('checkout/session')->getLastOrder();
      
      //Get shipping address Id
      $addressId = $order->getShippingAddress()->getId();
      
      $address    = Mage::getModel('sales/order_address')->load($addressId);
      
      $data       = $this->getRequest()->getPost();
      
      $address->addData($data);
      
      $address->implodeStreetAddress()->save();
      

      我也不确定Mage::getSingleton('checkout/session')->getLastOrder() 在您提交表单后是否仍会包含有效的订单 ID,因为您将加载一个新页面

      【讨论】:

      • 是的,getLastOrder() 仍然包含有效的订单 ID。
      【解决方案3】:

      虽然正常运行,但其他两个答案都有过多的地址加载。 getShippingAddress 已经返回 sales/order_address 的实例。所以程序可以简化为:

      $order = Mage::getSingleton('checkout/session')->getLastOrder();
      $data = $this->getRequest()->getPost();
      
      $order->getShippingAddress()->addData($data)
          ->save();
      

      只有在使用多行街道地址时才需要implodeStreetAddress 方法调用。

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 2017-07-01
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 2021-10-23
        • 2018-06-18
        相关资源
        最近更新 更多