プラグイン > 開発について > $shoppingPurchaseFlow->rollback()で在庫が増える |
開発について
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
n.o |
投稿日時: 2018/11/8 18:13
対応状況: −−−
|
常連 登録日: 2018/8/10 居住地: 投稿: 31 |
$shoppingPurchaseFlow->rollback()で在庫が増える 4.0正式版で$shoppingPurchaseFlow->rollback()すると在庫が増えるようになっています。
RC版ではこのようなことはなく、在庫は元に戻っていました。 何か呼び出し方に変更があったのでしょうか? プラグイン側では下記のようにprepareを行った後に、 決済に失敗した場合にrollbackを呼び出しています。 ご指摘頂けますと幸いです。 ■prepareの呼び出し $this->purchaseFlow->prepare($Order, new PurchaseContext()); $this->entityManager->flush(); ■rollbackの呼び出し $this->purchaseFlow->rollback($Order, new PurchaseContext()); $this->entityManager->flush(); |
okazy |
投稿日時: 2018/11/9 17:38
対応状況: −−−
|
半人前 登録日: 2017/10/11 居住地: 投稿: 28 |
Re: $shoppingPurchaseFlow->rollback()で在庫が増える `purchaseFlow->prepare()` と `purchaseFlow->rollback()` は別のトランザクションで実行する想定の実装となっています。
`purchaseFlow->prepare()` は購入フローの仮確定時に実行します。 例えば、リンク型決済にてEC-CUBEのご注文内容のご確認画面から決済会社のクレジットカード情報入力画面への遷移の際に実行します。 一方、 `purchaseFlow->rollback()` は仮確定状態の時に購入処理中に戻す時に実行します。 例えば、リンク型決済にて決済会社のクレジットカード情報入力画面からEC-CUBEのご注文手続き画面への遷移の際に実行します。 `purchaseFlow->prepare()` で問題が発生して切り戻したいときは `purchaseFlow->rollback()` を実行するのではなく、ShoppingException()の例外を投げるようにしていただけますでしょうか。 本体側でShoppingException()の例外catchしてロールバックが実行されます。 > 本体側ロールバックする処理 https://github.com/EC-CUBE/ec-cube/blob/48269717b26016b91f9331174030657ce97f54c7/src/Eccube/Controller/ShoppingController.php#L388 `purchaseFlow->prepare()` と `purchaseFlow->rollback()` の利用例についてはGitHubにて公開されていますので一度ご確認いただければと思います。 https://github.com/EC-CUBE/sample-payment-plugin ご確認よろしくお願いします。 |
n.o |
投稿日時: 2018/11/13 12:49
対応状況: −−−
|
常連 登録日: 2018/8/10 居住地: 投稿: 31 |
Re: $shoppingPurchaseFlow->rollback()で在庫が増える okazy様
ご返答ありがとうございます。 ログを確認したところ、コントローラーの開始時に トランザクションが開始されているのですね。 prepare後に独自にトランザクション開始していたので 同一トランザクションでは無いと思っていたのですが、 そうでは無かったようです。 別トランザクションでprepareとrollbackが行われるように 改修したいと思います。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |