Changes between Initial Version and Version 2 of Ticket #1921


Ignore:
Timestamp:
2012/08/21 17:06:44 (10 years ago)
Author:
habu
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #1921

    • Property Owner changed from somebody to habu
    • Property Status changed from new to assigned
    • Property 修正済み set
  • Ticket #1921 – Description

    initial v2  
    1919 と表示されて進めない(どちらかを削除すると進めます)。 
    2020}}} 
     21 
     22---- 
     23 
     24r22004 にて修正しました。 
     25 
     26== ■原因 == 
     27 
     28r21924 までは、 
     29カートに変更があったという事を正しく返せていなかった様です。 
     30 
     31r21925 にて、 
     32SC_CartSession.php の checkChangeCart の以下の行が修正され、 
     33購入処理開始時のカートと現在のカートに差異があった場合に、 
     34正しくその事を返せるように修正されています。 
     35 
     36{{{ 
     37$this->cartSession[$productTypeId][$key]['cancel_purchase'] = true; 
     38↓↓↓修正([$key]を削除)↓↓↓ 
     39$this->cartSession[$productTypeId]['cancel_purchase'] = true; 
     40}}} 
     41 
     42しかし、こうして、SC_CartSession::checkChangeCart が正しく動作する様になった事で、 
     43SC_Helper_Purchase::verifyChangeCart での不具合が表面化してきたというのが、本件の原因の様です。 
     44 
     45具体的には、以下の様に、購入処理対象の商品タイプ以外についてもチェックを行なうようになっている事が原因です。 
     46 
     47{{{ 
     48foreach ($cartKeys as $cartKey) { 
     49    // 初回のみカートの内容を保存 
     50    $objCartSession->saveCurrentCart($uniqId, $cartKey); 
     51 
     52    /* 
     53     * POSTのユニークIDとセッションのユニークIDを比較 
     54     *(ユニークIDがPOSTされていない場合はスルー) 
     55     */ 
     56    if (!SC_SiteSession_Ex::checkUniqId()) { 
     57        SC_Utils_Ex::sfDispSiteError(CANCEL_PURCHASE); 
     58        exit; 
     59    } 
     60 
     61    // 購入ボタンを押してから変化がないか 
     62    $quantity = $objCartSession->getTotalQuantity($cartKey); 
     63    if ($objCartSession->checkChangeCart($cartKey) || !($quantity > 0)) { 
     64        SC_Response_Ex::sendRedirect(CART_URLPATH); 
     65        exit; 
     66    } 
     67} 
     68}}} 
     69 
     70「初回のみカートの内容を保存」というコメントの通り、 
     71SC_CartSession::saveCurrentCart の第1引数に同じ $uniqId を渡していますので、 
     72購入処理開始時のカートとしては、 
     73foreachの最初のループで処理される商品タイプのカートしか保存されません。 
     74 
     75そして、2回目以降のループにて、 
     76$objCartSession->checkChangeCart($cartKey) 
     77が実行される際、別の商品タイプのカート情報と、 
     78購入処理開始時のカート(←最初に実行された商品タイプのカート情報が保存されている)の商品の個数が比較され、 
     79”カートの内容が変更された”と誤って判断されていました。 
     80 
     81 
     82 
     83== ■修正方法 == 
     84 
     85SC_Helper_Purchase::verifyChangeCart にて、 
     86購入処理対象の商品タイプのみ、カート情報をチェックする様に修正しました。 
     87 
     88 
     89 
     90== ■念のため確認 == 
     91 
     92なんらかの意図があって、購入処理対象の商品タイプ以外についてもチェックを行なうように 
     93途中から処理が追加されたのではない事を確認するため、チェンジログを追ってみましたが、 
     94verifyChangeCart関数がSC_Helper_Purchase.phpに追加された r19860 にて、 
     95最初からこの作りになっていた事を確認できました。