У меня недостаточно репутации, чтобы комментировать, но я смог использовать ответ @ gregdev для достижения этой цели.
Config.xml добавить наблюдателя событий:
<sales_model_service_quote_submit_success>
<observers>
<your_observer_name_here>
<class>module/observer</class>
<method>checkOrderCustomer</method>
</your_observer_name_here>
</observers>
</sales_model_service_quote_submit_success>
В вашем Observer.php
public function checkOrderCustomer($observer){
$order = $observer->getEvent()->getOrder();
//however you want to check for customer
$customerEmail = $order->getCustomerEmail();
$customer = Mage::getModel('customer/customer')->loadByEmail($customerEmail);
if($customer->getId()){
//assign order to customer
$order
->setCustomerId($customer->getId())
->setCustomerIsGuest(0)
->setCustomerGroupId($customer->getGroupId());
$order->getResource()
->saveAttribute($order, 'customer_id' )
->saveAttribute($order, 'customer_is_guest')
->saveAttribute($order, 'customer_group_id');
}
}
}
Я думаю, что проблема с sales_order_place_after
как-то связана сследующее в Mage / Sales / Model / Service / Quote.php
$transaction->addObject($order);
$transaction->addCommitCallback(array($order, 'place'));
$transaction->addCommitCallback(array($order, 'save'));
Я не уверен, что переменная $order
, переданная во второй обратный вызов, получает какие-либо изменения клиента, которые были применены во времяsales_order_place_after
событие.