Magento Community Edition 1.8に1.7以前のバージョンからアップデートする際には、注意するべき点が1つあります。
わずか1行の違いなのですが、うっかり忘れると購入ができなくなるという致命的な問題に発生します。 

これからアップデートをしようという方はこのエントリを事前に読んでいただいて、無用のトラブルを回避してください。

Magento Community Edition 1.8で行われた修正

Magento Community Edition 1.8では、購入処理に一部改良が加えられました。
余分な処理が省かれて、チェックアウト処理が高速化されただけでなく、セキュリティ面も改良されています。 
リリースノートによると、CSRF(クロス・サイト・リクエスト・フォージェリ)対策ということなのですが、実際の対策としては、セッション情報とPOSTデータ内に含まれるワンタイムトークンの照合による、処理の一貫性を検査する仕組みとなっています。 

修正が必要な箇所

修正が必要な箇所は、テンプレートのうちの1ファイルです。
checkout/onepage/review/info.phtml を1.8と1.7以前とで差分を取ると、以下のように違うことがわかります。

1.7まで


1.8


違いとしては、getUrlメソッドに対して与えられている引数が1つなのか、2つなのかという違いです。
1.8以降では引数が2つになり、第二引数に core/session モデルからCSRF対策のトークンを与えています。
これが1.7以前と1.8との違いです。 

修正を忘れるとどうなるか

Mage_Checkout_OnepageController::saveOrderAction() では、1.7までは前述のCSRF対策のトークンを検証していませんでした。ところが、1.8では、

array('form_key' => Mage::getSingleton('core/session')->getFormKey())

という処理が追加されたため、セッション変数内に格納されているトークンと、POSTデータが一致しない場合、購入確定処理がそれ以上進まないようになっています。

ですから、1.7以前からのアップデート時に、この修正を忘れると、購入ができなくなってしまうのです。

おわりに

この修正はMagento Enterprise Edition 1.13でも行われています(修正が行われたのはEnterprise Editionが先です)。
これからバージョンアップをしようと考えられている方は、このエントリでご説明した内容を忘れずに反映してください。

なお、

  • どのように修正してよいかわからない
  • アップデート作業自体が自力では難しい

という方は、弊社でご提供しております

をご検討ください(バージョンが古いほど費用がかかるのでご注意ください)。