Ticket #1506 (closed 改善提案: 修正済)

Opened 9 years ago

Last modified 7 years ago

決済処理中でストップした際に在庫とポイントが差し引かれてしまう

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:1 Changed 9 years ago by kotani

  • Milestone changed from EC-CUBE2.11.5 to EC-CUBE2.12.0alpha

comment:2 Changed 9 years ago by yomoro

  • Owner changed from somebody to yomoro
  • Status changed from new to assigned

comment:3 Changed 8 years ago by kajiwara

  • Owner changed from yomoro to somebody
  • Status changed from assigned to new

アサイン時より時間が経過しておりますので、一旦担当を戻させていただきます。

comment:4 Changed 8 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.12.2 to EC-CUBE 2.12.3

comment:5 Changed 8 years ago by AMUAMU

  • Owner changed from somebody to AMUAMU
  • Status changed from new to assigned

comment:6 Changed 8 years ago by kim

  • Milestone changed from EC-CUBE2.12.3 to EC-CUBE2.12.4

comment:7 Changed 7 years ago by kim

  • Priority changed from to

以下のプラグインの実装を本体に行う方向で検討。  https://www.ec-cube.net/products/detail.php?product_id=341

comment:8 Changed 7 years ago by kim

  • Cc nanasess added

comment:9 Changed 7 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 7 years ago by h_yoshimoto

  • 修正済み set

r23029 r23027
こちらで対応いただいています。

Seasoft さま
ご指摘ありがとうございます。
まずは今回こちらの内容を本体に組み込んで、β版リリース後に評価出来ればと考えております。
他懸念点などございましたらご指摘の程よろしくお願いいたします。

comment:11 Changed 7 years ago by h_yoshimoto

システムエラーが出ていたので r23055 にて修正

comment:12 Changed 7 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 7 years ago by h_yoshimoto

r23110 にて対応いただいています

comment:14 Changed 7 years ago by h_yoshimoto

r23181 にてdelflgがfalseでキャンセル処理がはしっていたのを修正

comment:15 Changed 7 years ago by h_yoshimoto

r23182 にてキャンセル処理を行うかのPENDING_ORDER_CANCEL_FLAGを追加

comment:16 Changed 7 years ago by h_yoshimoto

  • Status changed from assigned to closed
  • Resolution set to 修正済

comment:17 Changed 7 years ago by h_yoshimoto

  • Description modified (diff)
Note: See TracTickets for help on using tickets.