2012-04-30 24 views
7

「Firecheckout」というテンプレートマスタによってカスタムチェックアウト拡張機能が使用されています。それが関連しているかどうかはわかりませんが、私はそれを言及すべきであると考えました。場合によっては、トランザクションが「メール送信方法を指定してください」という理由でトランザクションに失敗したことがあります。私はこれがどうやって起こるかを追跡しようとするのに長い時間を費やしてしまいました。問題を再現するために私が考えることができるすべてを試しました。荷物の追加/削除、配送オプションを変更するクーポンコードの追加/削除、モバイルサイトとデスクトップサイトの切り替えなど)に応じて、私はチェックアウトページが表示されないようにすることができました配送方法にオプションが選択されています。しかし、注文を提出しようとすると、「発送方法を指定してください」という発送方法のセクションに赤いメッセージが即座に表示されます(電子メールに記載されている内容とページに表示されているエラーの内容との違いに注意してください...欠落した "a")。これでエラーメールが表示されることはありません。Magentoのトランザクションエラー「配送方法を指定してください」

私は、エラーメールが_validate方法この場合

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

TM_FireCheckout_Model_Service_QuoteMage_Sales_Model_Service_Quoteを拡張する)クラスでトリガされていることを見つけるコードを検索、私はどちらか$を推測しますメソッドまたは$ rateはnullまたはfalseですが、その理由は何ですか?これが起こらないように私ができることはありますか? FireCheckoutの_validateメソッドと親クラスの_validateメソッドの唯一の違いは、フィールドが必須とみなされる点です。アドレスオブジェクトは変更されません。したがって、getShippingMethodおよびgetShippingRateByCodeの呼び出しは、デフォルトのインストールと同じにする必要があります。

必要に応じて追加情報を提供できます。私は基本的に何がそのエラーを引き起こし、どのように再現できるのかを理解しようとしているので、最初にそれを引き起こしている穴に最終的にパッチを当てることができます。

ありがとうございます!

+2

なぜ、_validate() 'Mage :: log(" Firecheckout: "。var_dump($ method)。" "" var_dump($ rate)、null、 'mydebug.log'、true)にログ行を追加しないでください。 ; 'Mage_Sales_Model_Service_Quoteのローカルコピーにこのカスタムログファイルをテールして、おそらくそれらの値が持続しているかどうかを確認するために注文と顧客IDを追加しますか? – B00MER

+1

私は全く同じエラーがありますが、私はAppthaのOnestepcheckout Extensionを使っています。どんな助けもありがとう。 – Lennon

答えて

0

これまでも同様のことが発生しましたが、Firecheckoutではありませんでした。しかし、それはまた@LennonのようにAppthaからのOnestepcheckout Extensionでした。長い話を簡単に言えば、データを破棄するのはJavaScriptの処理の格差です。私はあなたに明確な答えはありませんが、フォームの検証とチェックアウトフォームのデータ保存の間に何が起こるかを調べることをお勧めします。

調査を開始するには、FFでFirebugを起動し、コンソールを見て、データがまだ引き継がれているかどうかを確認します。またcontroler_action_predispatchイベントで次の操作を行うための単純なオブザーバーモジュールを作成することができます。

$request = $observer->getControllerAction()->getRequest(); 
Mage::log(var_export($request->getParams(),true)); 

だけで直接ご精算ルート内のコントローラファイルを編集..or。何でもあなたのボートを浮かせます。

ログを有効にし、tail -f var/logs/system.logを有効にします。要求がログに一致することを確認する必要があります。それで私は私の問題を解決し始めました。

また、これは "copypasta"修正や問題の根本にあるチュートリアルではなく、自分の経験を初めての経験からどのように診断したかを共有しています。

あなたが変更した後に配送方法を定義する必要がhttp://www.silksoftware.com/magento-module-creator

0

で非常に迅速にモジュールを作成することができます。 たとえば、Firecheckoutの「indexController」に「saveShippingAction」という関数を作成します。 この機能を使用すると、顧客データを変更するたびに、または好きなように、Ajaxを介していつでも呼び出すことができます。場所インサイド

:この例では

$customer = Mage::getSingleton('customer/session')->getCustomer(); 
    $shippingData = $this->getRequest()->getParam('shipping'); 
    $shippingData['street'] = implode("\n", $shippingData['street']); 
    $customerAddress = $customer->getAddresses(); 
    $customerAddress = end($customerAddress); 
    $customerAddress->setIsDefaultShipping(true)->setSaveInAddressBook(true); 
    $customerAddress->addData($shippingData)->save(); 

私はあなたのケースでは、新しいクライアントのために保存する必要がある場合は、バック顧客の最後のアドレスへの配信データを記録ちょうど彼のアドレスを作成し、配送先住所として保存します。

私は、幸運を助けて願っています。

関連する問題