13

断続的で一見ランダムなバグが、少なくとも 3 つの異なるサイトで Magento チェックアウトに影響を与えています。Magento フォーラムには、このトピックに関する多くのスレッドがあり、いくつかの悪いアドバイスがあります (例外を飲み込んでください)。この問題は売り上げの損失を引き起こし、サイト所有者に多くの不満をもたらしています. この問題は、2011 年 3 月以降、Magento で記録されています ( http://www.magentocommerce.com/bug-tracking/issue/?issue=11081 )。

支払い方法、ブラウザ、Magento のバージョン、またはその他の要素に相関を試みたパターンはありません。主な症状は、var/log/exception.log に記録された例外であり、「見積もりの​​合計を収集する必要があります」というメッセージがスローされMage_Sales_Model_Quote::prepareRecurringPaymentProfiles()ます。

例外が発生したときに要求パラメーターをログに記録し、paymentパラメーターが空であることを特定しました。お客様が [Place Order] をクリックした時点で Magento が Payment ステップからフォーム要素を再送信し (AJAX リクエスト間でクレジット カードの詳細がサイトに保持されないようにするため)、フォームのシリアル化が失敗し、null が返されると考えられます。 /empty を opcheckout.js コードが PHP に渡し、例外をトリガーします。

Form.serializeプロトタイプのメソッドがこのように失敗する原因となる条件またはデータ、および/または問題をさらに攻撃する方法を提案できますか?

4

2 に答える 2

9

実際には、考えられる理由はほとんどありません。

プロトタイプのForm.serialize()メソッドは、 という同じクラスの別のメソッドを使用していForm.getElements()ます。次のコードを試して、どの要素が payment.form オブジェクトから渡されるかを確認してください。review.save()デバッグ目的で実行時にメソッドをオーバーライドするだけです。

次のコードをお気に入りのブラウザー (Chrome、Firefox、または Safari) のコンソールに貼り付けることができます。

review.save = review.save.wrap(function (originalMethod) {
    console.log(payment.form); // Check what is in the form object
    console.log(Form.getElements(payment.form)); // Check what items are returned for serializing
    originalMethod(); // Calling original place order functionality to see if the issue occurs, so you can compare above debug info
});

シリアル化プロセスの問題を見つけるのに役立つと思います。支払いフォームが何らかの理由で空になった、またはフォーム内のすべての項目が無効になったなどの可能性があります...

敬具、イヴァン

于 2012-12-08T13:45:09.453 に答える