在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保存到客户对象?
答案 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();
}
希望以上帮助
干杯 小号