Ticket #1506 (closed 改善提案: 修正済)
決済処理中でストップした際に在庫とポイントが差し引かれてしまう
Reported by: | yomoro | Owned by: | AMUAMU |
---|---|---|---|
Priority: | 高 | Milestone: | EC-CUBE2.13.0 |
Component: | フロント | Version: | 2.11.3 |
Keywords: | Cc: | nanasess | |
修正済み: | yes |
Description (last modified by h_yoshimoto) (diff)
決済処理中のステータスで終了した場合、お客様の使用したポイントと在庫が通常の決済と同じ様に減少する。 本来であればその仕様で問題無いと思われるが、お客様側からポイントが減っているとお問い合わせを受けてしまう場合もあるので仕様を検討したい。 (決済処理中→新規受付の際に在庫の減少、ポイント現象を行うイメージ)
○checkDbAllPendingOrder
・全ての受注に対して決済処理中のステータスをキャンセルに変更します。
・作成日付がPENDING_ORDER_CANCEL_TIME(初期値:900秒) を超えている受注に対して処理が行われます。
○checkDbMyPendignOrder
・ログインユーザーに紐付く受注に決済処理中ステータスがあれば処理が行われます。
・カートに商品があればキャンセル、なければ削除の処理が行われます。
○checkSessionPendingOrder
・セッションに受注IDが存在し、決済処理中ステータスであれば処理を行います。
・カートに商品があればキャンセル、なければ削除の処理が行われます。
・セッションの受注IDは破棄されます。
Change History
comment:2 Changed 12 years ago by yomoro
- Owner changed from somebody to yomoro
- Status changed from new to assigned
comment:3 Changed 12 years ago by kajiwara
- Owner changed from yomoro to somebody
- Status changed from assigned to new
アサイン時より時間が経過しておりますので、一旦担当を戻させていただきます。
comment:4 Changed 12 years ago by h_yoshimoto
- Milestone changed from EC-CUBE2.12.2 to EC-CUBE 2.12.3
comment:5 Changed 12 years ago by AMUAMU
- Owner changed from somebody to AMUAMU
- Status changed from new to assigned
comment:7 Changed 11 years ago by kim
- Priority changed from 中 to 高
以下のプラグインの実装を本体に行う方向で検討。 https://www.ec-cube.net/products/detail.php?product_id=341
comment:9 Changed 11 years ago by Seasoft
r23027 につきまして、気になる点がありますので、ご対応を検討頂けますと幸いです。
- インデントが TAB になっている。
EC-CUBE標準規約から抜粋: インデントは, 半角スペース4文字を使用し, タブは使用しない.
- 複数のメソッドに、同一コード(複数行)がコピペされているようです。呼び出し先を1つのメソッドに統合することで冗長さを改善できるのではないかと感じております。
SC_Helper_Purchase_Ex::checkSessionPendingOrder(); SC_Helper_Purchase_Ex::checkDbMyPendignOrder(); SC_Helper_Purchase_Ex::checkDbAllPendingOrder(); ↓ SC_Helper_Purchase_Ex::checkPendingOrder();
comment:10 Changed 11 years ago by h_yoshimoto
- 修正済み set
comment:11 Changed 11 years ago by h_yoshimoto
システムエラーが出ていたので r23055 にて修正
comment:12 Changed 11 years ago by m_uehara
checkDbAllPendingOrder にてシステムエラーが表示されました。
Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。 SQL: [UPDATE dtb_order SET status= $1, add_point= $2, use_point= $3, update_date= CURRENT_TIMESTAMP WHERE order_id = $4] PlaceHolder: [array ( 0 => 'ORDER_PENDING_ERROR', 1 => '0', 2 => '0', 3 => '1', )] MDB2 Error: invalid number _doQuery: [Error message: Could not execute statement] [Last executed query: EXECUTE mdb2_statement_pgsql_91d83624cd879f9ef16d549dbac38c0ff514b667f ('ORDER_PENDING_ERROR', '0', '0', '1')] [Native message: ERROR: invalid input syntax for integer: "ORDER_PENDING_ERROR" 行 1: ..._pgsql_91d83624cd879f9ef16d549dbac38c0ff514b667f ('ORDER_PEN... ^]
再現経緯
1.受注管理にて、「決済処理中」の受注データを登録
2.TOP画面へ遷移
3.システムエラーの発生
おそらくcheckDbAllPendingOrderの引数に指定しているORDER_PENDING_ERRORが定数宣言されていないのではないかと思われます。
comment:13 Changed 11 years ago by h_yoshimoto
r23110 にて対応いただいています
comment:14 Changed 11 years ago by h_yoshimoto
r23181 にてdelflgがfalseでキャンセル処理がはしっていたのを修正
comment:15 Changed 11 years ago by h_yoshimoto
r23182 にてキャンセル処理を行うかのPENDING_ORDER_CANCEL_FLAGを追加
comment:16 Changed 11 years ago by h_yoshimoto
- Status changed from assigned to closed
- Resolution set to 修正済