Üretimdeki bu hata için istisna günlükleri alıyorum, ancak sorunu yerel veya hazırlama ortamımda yeniden oluşturamıyorum, bu nedenle sorun gidermek oldukça zor oldu.
Hata Mage_Sales_Model_Service_Quote::_validate()
, $rate
döndürülen $rate = $address->getShippingRateByCode($method)
öğe boş olduğundan kaynaklanır .
Neler olup bittiğine dair daha iyi bir fikir edinmek için bazı günlüklere ekledim ve $method
bunun doğru gönderim yöntemini içerdiğini görebiliyorum .
En iyi tahminim, sürecin bir noktasında, nakliye oranlarının ne zaman olması gerektiğinden önce silinmesidir.
Bu istisna her gerçekleştiğinde, bunun geçersiz bir kredi kartı gibi meşru bir istisnadan hemen sonra gerçekleştiğini fark ettim. Sorunu geçersiz bir kredi kartı, sonra geçerli bir kredi kartı kullanarak yeniden oluşturmaya çalıştım, ancak benim için üretmiyor - evreleme, üretim veya yerel.
Benim ilk öbek belki nakliye yöntemi ilk geçerli istisna sonra bir yerde kayboluyordu oldu, ama durum böyle değil, çünkü $method
bu istisna atıldığı anda doğru değeri olduğunu görüyorum .
Kullandığım ödeme modülü AwesomeCheckout'tur - burada sorunlara neden olması gereken siparişler oluştururken, ancak ilgili olabilecek herhangi bir özel mantığa sahip değilim.
GÜNCELLEME: Eğer eksikse oranları hatırlamak için bazı kod ekledim.
protected function _validate()
{
if (!$this->getQuote()->isVirtual()) {
$address = $this->getQuote()->getShippingAddress();
$addressValidation = $address->validate();
if ($addressValidation !== true) {
Mage::throwException(
Mage::helper('sales')->__('Please check shipping address information. %s', implode(' ', $addressValidation))
);
}
$method= $address->getShippingMethod();
$rate = $address->getShippingRateByCode($method);
/**
* Start Customization
*/
if (!$this->getQuote()->isVirtual() && !$rate) {
Mage::logException(new Exception("Rate was empty inside quote validate method, trying to forcefully recalculate"));
$this->getQuote()->getShippingAddress()->setCollectShippingRates(true);
$this->getQuote()->setTotalsCollectedFlag(false);
$this->getQuote()->collectTotals();
$rate = $address->getShippingRateByCode($method);
}
/** End Customization **/
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
Mage::throwException(Mage::helper('sales')->__('Please specify a shipping method.'));
}
}