バージョン選択

フォーラム

メニュー

オンライン状況

48 人のユーザが現在オンラインです。 (40 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 48
もっと...

サイト内検索

バグ報告 > フロント機能 > 受注詳細情報登録(registerOrderComplete)のトランザクション処理

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
jiro
投稿日時: 2012/10/24 11:29
対応状況: −−−
新米
登録日: 2009/9/14
居住地:
投稿: 10
受注詳細情報登録(registerOrderComplete)のトランザクション処理
お世話になります。

class SC_Helper_Purchase の registerOrderCompleteですが、
コードの中で

-----------------------------------------------
// 詳細情報を取得
$cartItems = $objCartSession->getCartList($cartKey);

// 詳細情報を生成
$objProduct = new SC_Product_Ex();
$i = 0;
$arrDetail = array();

foreach ($cartItems as $item) {
      (略)
}

とあるのですが、
これでは、カートセッションが切れて空になっていた場合に、注文詳細が入らないで決済が完了してしまわないでしょうか?


---------------------------------------------------------
$cartItems = $objCartSession->getCartList($cartKey);

//---------------------------
if(empty($cartItems)){
$objQuery->rollback();
SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, "", false,"システムエラーです");
}
//---------------------------

// 詳細情報を生成
$objProduct = new SC_Product_Ex();
$i = 0;
$arrDetail = array();

foreach ($cartItems as $item) {
      (略)
}
---------------------------------------------------------

のように処理しないと、危険な気がします。
実装漏れでしょうか?それとも、単なる私の思い違いでしょうか。

当方の利用しているEC CUBEのバージョンは、2.11.5ですが、最新版(2.12.2)をダウンロードして確認してみたところ、こちらも同様でした。

もし、仮に仕様であるならば、なぜこのような仕様にしているか、意図をご存知の方がいれば、教えてください!
jiro
投稿日時: 2012/10/24 15:10
対応状況: −−−
新米
登録日: 2009/9/14
居住地:
投稿: 10
Re: 受注詳細情報登録(registerOrderComplete)のトランザクション処理
ちなみに、このような質問を出した理由は、
「受注商品情報」が空になって登録された注文が
発生したためですが(dtb_order_detailにレコードが存在していなかった)

同じような現象を確認された方はいらっしゃいますでしょうか??
jiro
投稿日時: 2012/10/24 15:27
対応状況: −−−
新米
登録日: 2009/9/14
居住地:
投稿: 10
Re: 受注詳細情報登録(registerOrderComplete)のトランザクション処理
http://svn.ec-cube.net/open_trac/ticket/905

↑ver2.5で、当不具合は解消したとのことですが、

ver2.11.5でも、現象が発生しています。

不可解なのは、dtb_orderには、レコードが問題なく登録されていることです。
nanasess
投稿日時: 2012/10/24 15:57
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2314
Re: 受注詳細情報登録(registerOrderComplete)のトランザクション処理
引用:

ちなみに、このような質問を出した理由は、
「受注商品情報」が空になって登録された注文が
発生したためですが(dtb_order_detailにレコードが存在していなかった)


受注完了時の多重アクセスなどが考えられます.
dtb_order_detail は, 受注完了処理のたびに物理削除されるので, 2回目の処理が走ったさいに削除されてしまいます.

根本的な対応は dtb_order_temp を更新するさいに FOR UPDATE で明示的にロックする方法が考えられます.

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=6189&forum=8
jiro
投稿日時: 2012/10/24 17:09
対応状況: −−−
新米
登録日: 2009/9/14
居住地:
投稿: 10
Re: 受注詳細情報登録(registerOrderComplete)のトランザクション処理
引用:

nanasessさんは書きました:
引用:

ちなみに、このような質問を出した理由は、
「受注商品情報」が空になって登録された注文が
発生したためですが(dtb_order_detailにレコードが存在していなかった)


受注完了時の多重アクセスなどが考えられます.
dtb_order_detail は, 受注完了処理のたびに物理削除されるので, 2回目の処理が走ったさいに削除されてしまいます.

根本的な対応は dtb_order_temp を更新するさいに FOR UPDATE で明示的にロックする方法が考えられます.

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=6189&forum=8


ありがとうございます。

明示的なロックをする対策は、
ec cube の2.11.5 でもまだ実装されていないということでしょうか??

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,944名です
総投稿数は110,018件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.