当以访客身份通过时,客户电子邮件在Checkout上是必需的错误

时间:2014-05-14 14:22:02

标签: magento magento-1.7

在Magento 1.7中,每当我在onepage checkout过程结束时作为访客进行结帐流程时,我都会收到Magento错误:

Customer email is required

使用xDebug来分析我在观察者中的代码,该代码在 sales_order_place_after 观察者上执行我有一个名为afterOrderPlaced()的函数

public function afterOrderPlaced($observer)
{
    $organisation_id = Mage::getSingleton('customer/session')->getOrganisationId(); #$organisation_id = 25679;
    $this->_order = $observer->getEvent()->getOrder();
    $this->_order->setOrganisationId($organisation_id)->save();

    // Customer stuff
    $this->_customer_id = $this->_order->getCustomerId();
    $this->_customer = $this->_order->getCustomer(); 

    // problem on the next line below #PROBLEM HERE#
    $this->_customer->setOrganisationId($organisation_id)->save();
}

问题出在函数的最后一行 - 由于某种原因,它似乎不喜欢客户对象上的save()。这将进入save()中第161行的Mage \ Core \ Model \ Resource \ Transaction.php中的核心文件 - 见下文:

public function save()
{
    $this->_startTransaction();
    $error     = false;

    try {
        foreach ($this->_objects as $object) {
            $object->save();
        }
    } catch (Exception $e) {
        $error = $e;
    }

    if ($error === false) {
        try {
            $this->_runCallbacks();
        } catch (Exception $e) {
            $error = $e; ## ERROR IS HAPPENING HERE?! ##
        }
    }

    if ($error) {
        $this->_rollbackTransaction();
        throw $error;
    } else {
        $this->_commitTransaction();
    }

    return $this;
}

任何人都可以在我的观察者中指出我的问题,以及为什么它似乎不想将自定义organisation_id保存到客户对象?

1 个答案:

答案 0 :(得分:1)

对于访客用户,您为什么要在客户资料中保存组织ID,因此不会保存客户资料,因为Magento不会在访客用户的客户实体中创建客户。您需要在上面的函数中添加条件以解决问题

if(!$order->getCustomerIsGuest()){
   // Customer stuff
   $this->_customer_id = $this->_order->getCustomerId();
   $this->_customer = $this->_order->getCustomer(); 

  // problem on the next line below #PROBLEM HERE#
  $this->_customer->setOrganisationId($organisation_id)->save();
}

希望以上帮助

干杯 小号