मुझे उत्पादन में इस त्रुटि के लिए अपवाद लॉग मिल रहे हैं, लेकिन मैं अपने स्थानीय या मंचन वातावरण में इस मुद्दे को पुन: पेश करने में असमर्थ हूं, इसलिए समस्या निवारण के लिए यह बहुत कठिन है।
त्रुटि उत्पन्न होती है Mage_Sales_Model_Service_Quote::_validate()
क्योंकि $rate
द्वारा दिया गया रिटर्न $rate = $address->getShippingRateByCode($method)
खाली है।
मैंने कोशिश की है कि जो कुछ चल रहा है उसका बेहतर अंदाजा लगाने के लिए कुछ लॉगिंग में जोड़ा गया है, और मैं देख सकता हूं कि $method
इसमें सही शिपिंग विधि है।
मेरा सबसे अच्छा अनुमान है कि इस प्रक्रिया में कुछ बिंदु पर, शिपिंग दरों को हटा दिया जा रहा है जब उन्हें होना चाहिए।
मैंने देखा है कि हर बार यह अपवाद होता है, यह वैध अपवाद के तुरंत बाद होता है, जैसे कि अमान्य क्रेडिट कार्ड। मैंने एक अमान्य क्रेडिट कार्ड का उपयोग करके इस मुद्दे को फिर से शुरू करने की कोशिश की है, फिर एक वैध है, लेकिन यह मेरे लिए पुन: पेश नहीं करता है - मंचन, उत्पादन या स्थानीय में।
मेरा प्रारंभिक कूबड़ यह था कि शायद शिपिंग विधि पहले वैध अपवाद के बाद कहीं खो रही थी, लेकिन ऐसा नहीं है, क्योंकि मैं देख रहा हूं कि $method
उस समय इसका सही मूल्य है कि यह अपवाद फेंक दिया गया है।
चेकआउट मॉड्यूल जो मैं उपयोग कर रहा हूँ वह बहुत बढ़िया है - यह वास्तव में मेरे ज्ञान के लिए कोई कस्टम तर्क नहीं है जब आदेश दिया जाए कि यहाँ समस्याएँ पैदा हों, लेकिन संबंधित हो सकते हैं।
अद्यतन करें: मैंने कुछ कोड जोड़े हैं यदि वे गायब हैं तो दरों को याद करने का प्रयास करें।
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.'));
}
}