চেকআউট করার সময় একটি "শিপিংয়ের পদ্ধতি নির্দিষ্ট করুন" ব্যতিক্রম পাচ্ছেন


18

উত্পাদনের এই ত্রুটির জন্য আমি ব্যতিক্রম লগগুলি পেয়েছি, তবে আমি আমার স্থানীয় বা মঞ্চ পরিবেশে সমস্যাটি পুনরুত্পাদন করতে অক্ষম, তাই সমস্যা সমাধানের পক্ষে এটি বেশ কঠিন।

ত্রুটিটি উত্পন্ন হয়েছে 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.'));
        }
    }

আপনি কি তৃতীয় পক্ষের শিপিং এক্সটেনশন ব্যবহার করছেন? ফ্ল্যাটরেটের মতো নেটিভ ম্যাজেন্টো পদ্ধতির সাথে পরীক্ষা করা কিছুটা অন্তর্দৃষ্টি দিতে পারে তা চেকআউট এক্সটেনশন বা শিপিং এক্সটেনশন কিনা
স্যান্ডার ম্যানজেল

1
প্রযোজনায় এটি ঘটতে দেখাতে এমন একটি দোকানও আমি দেখেছি, প্রায় একাধিকবার পর পর। আমরা কোনও পরিবেশে নিজেকে পুনরুত্পাদন করতে সক্ষম হইনি।
পিটার ও'ক্যালাহান

@ স্যান্ডার, হ্যাঁ আমরা একটি তৃতীয় পক্ষের এক্সটেনশন ব্যবহার করছি। আমি নিশ্চিত যে এটি মূল কারণ নয় যদিও এটি সংগ্রহের হারগুলি () পদ্ধতির তুলনায় মাত্র জরিমানা করে এবং এমনকি যে ক্ষেত্রে এটি ব্যর্থ হয়, আমি দেখতে পাচ্ছি যে হারগুলি এপিআই-র উপর ঠিক জরিমানা ফিরে এসেছে।
kalenjordan

@ ক্যাগস, সত্যিই ??! জেনে রাখা ভাল, সম্ভবত আমাদের এটির ট্যাগ করতে হবে। এটি সেই গুরুত্বপূর্ণ বিষয়গুলির মধ্যে একটি তবে এটি খুব কম উত্পাদন করে, কারণ এটি কোনও অগ্রাধিকার নয়।
kalenjordan

@ স্যান্ডার ম্যানজেল, দুর্ভাগ্যক্রমে ফ্ল্যাটরেট দিয়ে এটি চেষ্টা করা কোনও বিকল্প নয়, কারণ সমস্যাটি পুনরুত্পাদন করার চেষ্টা করার জন্য আমরা উত্পাদনের শত শত গ্রাহকের কাছে সঠিক শিপিং হার প্রদান বন্ধ করতে পারি না। যদি আমি আমার স্থানীয় পরিবেশে এটি পুনরুত্পাদন করতে পারি, তবে নিশ্চিতভাবে ভ্যানিলা শিপিং পদ্ধতির বিরুদ্ধে পরীক্ষা করা আমি প্রথমে চেষ্টা করব।
kalenjordan

উত্তর:


8

আপনাকে কীভাবে হারগুলি কাজ করে এবং কীভাবে অনুরোধ করা হয় তা আপনাকে বুঝতে হবে। ->setCollectShippingRates(true)শিপিনএড্রেস অবজেক্টে সেট করা থাকলে মূলত হারগুলি অনুরোধ করা হয় এবং ফলস্বরূপ হারগুলি সংগ্রহ এবং হার সারণীতে সংরক্ষণের ফলাফল হয় stored এই টেবিলটি পরে খালি করা হয় এবং নতুন হারের অনুরোধে আবার পূরণ করা হয়।

আপনার ক্ষেত্রে যা ঘটছে তা হ'ল ত্রুটিটি নিক্ষেপ করা হয় এবং অনুরোধ পুনরাবৃত্তি হয় এবং হারগুলি অনুরোধ করা হয় না তবে আশা করা যায় যে সেখানে উপস্থিত রয়েছে। সুতরাং চেষ্টা করুন এবং জোর করে হারগুলি সংগ্রহের উপর দিয়ে দিন

getQuote()->getShippingAddress()->setCollectShippingRates(true);

এবং তারপরেও যদি কাজ না হয় তবে মোটগুলিও পুনঃবিবেচিত করার চেষ্টা করুন

getQuote()->setTotalsCollectedFlag(false)->collectTotals();

সতর্কতা অবলম্বন করুন যে একাধিকবার কালেক্টটটলকে কল করা আপনার মোটগুলিকে গোলমেলে ফেলতে পারে যদি কিছু এক্সটেনশান মোটের অবজেক্টগুলি সঠিকভাবে প্রয়োগ না করে (একটি সাধারণ ত্রুটি)


ধন্যবাদ, বোধগম্য। কেন এই ধারণা এত কম হলেও ঘটবে? যদি অর্থ প্রদানের ত্রুটি যদি হারগুলি পুনরায় সেট করা হয় তবে আমি প্রতিবার অর্থ প্রদানের ত্রুটি হলে এটি ঘটবে বলে আশা করব।
kalenjordan

এটি ফ্ল্যাগগুলির উপর নির্ভর করে এবং যদি এটি বলা হয় বা না আপনি যদি এটিকে ত্রুটির অনুলিপি করতে পারেন তবে ডিবাগার দিয়ে এটি সনাক্ত করা সহজ। তবে যদি আপনার অর্থ প্রদানের পদ্ধতি ত্রুটিটি সার্ভারে একটি পূর্ণ রাউন্ডট্রিপ না করে এবং কেবল প্রস্থানের সাথে অনুরোধটি ভেঙে দেয় তবে এটি কেবল সমস্ত নির্ভরশীল পর্যবেক্ষক ইত্যাদি কার্যকর করতে পারে
এন্টন এস

কিছু কোডে যুক্ত হয়েছে এবং এটি এখনও ব্যর্থ হয়েছে। আমি $this->getQuote()->getShippingAddress()->setCollectShippingRates(true)লাইনটি ভুলে যাইনি তাই এখন আমি এটি চেষ্টা করে যাচ্ছি।
কালেঞ্জর্ডান

সমস্যাটি আবার ঘটেছে, এবং আমার কোডে কোডটি ব্যতিক্রম ঘটতে বাধা দিয়েছে। কিন্তু লেনদেনটি এখনও ব্যর্থ হয়েছে কারণ এককভাবে ব্রিন্ট্রি কয়েক মিনিটের জন্য ডাউন ছিল। অবিশ্বাস্য.
kalenjordan

1
ঠিক আছে স্ক্র্যাচ। এই বারটি হওয়ার কারণটি সম্পূর্ণ ভিন্ন কারণে ছিল। সাবস্ক্রিপশন অর্ডার এমন কোনও ঠিকানার জন্য উত্পন্ন করার চেষ্টা করা হয়েছিল যেখানে সেখানে কোনও শিপিং হার পাওয়া যায়নি, সুতরাং ত্রুটি বার্তাটি বৈধ ছিল। @
প্রক্সি

3

এটি বুঝতে পেরেছি। আমার একটি সম্পর্কিত ব্যতিক্রম ছিল যা প্রায় একই ফ্রিকোয়েন্সি সহ নিক্ষেপ করা হচ্ছিল, এটি ছিল "অনুরোধ করা অর্থ প্রদানের পদ্ধতিটি পাওয়া যায় না"।

দেখা যাচ্ছে যে এটি হওয়ার কারণটি ছিল কারণ আমার এক পর্যবেক্ষক sales_place_order_afterকিছু সাবস্ক্রিপশন মূল্য নির্ধারণের জন্য একটি উদ্ধৃতি অবজেক্ট (এবং এটি সংরক্ষণ করে) তৈরি করছিলেন।

নতুন গ্রাহক হিসাবে প্রথমে খারাপ ক্রেডিট কার্ড পরীক্ষা করে (লগ ইন না করা) এর পরে আমি এটি পুনরুত্পাদন করতে সক্ষম হয়েছি, তারপরে ফিরে গিয়ে ক্রেডিট কার্ডটি ঠিক করে আবার চেকআউট করার চেষ্টা করেছি।

ব্যতিক্রম নিক্ষেপ করছিল কারণ loadCustomerQuoteপর্যবেক্ষক হিসাবে customer_login, যদি আপনার একাধিক উদ্ধৃতি থাকে তবে এটি আপনার উদ্ধৃতিগুলি একত্রিত করবে এবং এটি করার ফলে উদ্ধৃতিতে অর্থ প্রদানের কিছু তথ্য হারাবে।

সমাধানটি ছিল আমার সাবস্ক্রিপশন পর্যবেক্ষকটিতে তৈরি করা নতুন উক্তিটি মুছে ফেলা।

আপডেট: না, "অনুরোধ করা অর্থপ্রদানের পদ্ধতিটি উপলভ্য নয়" এর সমাধান এই সমস্যাটি সমাধান করেনি, এখনও ঘটছে।


বেশ দেরিতে, তবে এই কারণেই আমি আর এই ইভেন্টটি (বিক্রয় আদেশের স্থানের পরে) আর ব্যবহার করি না। অর্ডার দেওয়ার পরে যদি কিছু হওয়ার দরকার হয় তবে আমি একটি সারি নিয়ে এসেছি।
ফিলিঙ্কল

: একই মত আপনি আমাকে সমাধানের জন্য চেকআউট পৃষ্ঠা ত্রুটি "একটি শিপিং পদ্ধতি উল্লেখ করুন" সাহায্য করবে magento.stackexchange.com/q/225297/57334
zus

0

শুধু লক্ষণীয়, কখনও কখনও পেপাল এক্সপ্রেস অর্ডার স্থাপনের পরে "পেয়ার শনাক্ত করা হয়নি" বলে ত্রুটি দেয়। এই ত্রুটিটি একই "দয়া করে একটি শিপিং পদ্ধতি নির্দিষ্ট করুন" ব্যতিক্রম থেকে উদ্ভূত হয়েছিল। ম্যাজেন্টো 1.8.1.0 এ অর্ডার স্থাপনের পরে "কোট মার্জ" বা "কার্ট মার্জ" করার কারণে এটি সহজেই পুনরুত্পাদনযোগ্য। উদ্ধৃতি বা কার্টগুলি মার্জ করার ফলে শিপিংয়ের হারগুলি সাফ হয়ে যাবে তবে পুনরায় গণনা করা হবে না। এবং প্রকৃতপক্ষে, আপনি এটি ঠিক করতে চান না, কারণ গ্রাহক সম্ভবত তারা যে বিষয়ে রাজি হয়েছিল তার চেয়ে বেশি অর্থ প্রদান করবে! পরিবর্তে আপনি মার্জ কার্যকারিতা - বা Magento আপগ্রেড করতে চান।

এটি ঠিক করা হয়েছে 1.9; পেপ্যাল ​​এ পুনঃনির্দেশিত হওয়ার আগে গ্রাহকদের প্রথমে লগ ইন করতে হবে।


0

আমার ক্ষেত্রে এই ত্রুটির তার থেকে উদ্ভূত nullমান $methodএবং$rate

$method= $address->getShippingMethod();
$rate  = $address->getShippingRateByCode($method);
    if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
Mage::throwException(Mage::helper('sales')->__('Please specify a 
shipping method.'));
}

সুতরাং আমি এ থেকে একটি হার সেট। আপনার ম্যাজেন্টোতে উপলভ্য পদ্ধতি ও রেটে

$quote = Mage::getSingleton('checkout/session')->getQuote();
$address = $quote->getShippingAddress();
$shippingMethod = 'amtable_amtable5';
$shippingMethod = 'flatrate_flatrate';
$address->setCollectShippingRates(true)->collectShippingRates()->setShippingMethod($shippingMethod);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.