stripeで決済後、同じワークフロー内でLiftshifterによる繰り返し処理の実装ができない

長文失礼します
bubbleを使ってチケット販売サービスを作っています。

チケットは枚数限定(VIP席10枚など)で販売される予定のため、購入がバッティングした場合に
席数以上に販売してしまうことを防ぐ仕組みを考えています。

前提
・データ構成がイベント日程:チケット=1:Nになっている
・複数のチケットを1回の決済で購入可能

具体例
4/1
・VIP 最大10席
・A席 最大50席
4/2
・VIP 最大10席
・A席 最大50席

となっているときに、4/1のVIPと4/2のVIPを1回の決済で同時に購入できるようにしたいです。
bubbleでは排他はできないので、以下の実装を考えました。

1.チケット残数チェック
2.オーソリ(仮売上)実行 ★stripe画面
3.チケット残数再チェック
4.チケット販売確定
5.本決済

ユーザは2.でstripeの決済画面に飛ぶのでカードの情報を入力したりする都合上、1.のチェックを通過しても、2.で時間がかかって他の購入者に追い抜かれてしまう可能性があるため3.でも再度チェックを入れたいと考えています。

そこで、3.のチェックの時にLiftShifterを使い、購入予定のチケットの残数を確認しようとしたのですが、2.で一度stripeの画面に遷移しているため、3.の前にpage loadが走り、2.以降ではLiftShifterがエラーとなり使用できませんでした。
(LiftShifterはPage loadのワークフローではエラーになり動作しません)

教えていただきたいこと
page load後にエラーを出さずにLiftShifterを使って繰り返し処理を行う方法、もしくは、LiftShifter以外の方法でpage load後にエラーにならずに繰り返し処理が実行できる方法をご教授頂けないでしょうか。

試したこと

2.完了後にスリープを入れたり、ページロードが終わったことを確認してからLiftShifterを実行してみましたが、エラーは解消されませんでした。

1~5の処理は1つのワークフロー内で実施してますでしょうか?

例えば以下2点どちらかの処理ではいかがでしょうか。

  • 2の処理実施時にチケットを仮押さえする(eプラスなども仮押さえだったような気がします)
  • 2の実行後、別画面や別ワークフローで3以降の処理を実施
「いいね!」 1

ご回答ありがとうございます!
はい、1~5の処理は1つのワークフローで実施しています。
ワークフローを分けてしまうと2から4までの時間が空いてしまって、他の購入者に追い抜かれてしまう可能性が上がってしまうのではないかと考えていました。

2の処理実施時、というのは1と2の間でしょうか、2と3の間でしょうか。
1と2の間の場合、仮押さえ後に2のstripe画面で離脱されてしまうと仮押さえ状態が残ってしまい、仮押さえ状態のチケットを削除する方法が思いつかず断念したところでした。。
バッチ処理のように1日に1回仮押さえチケットを削除するという動きを作ることはできると思うのですが、その1日の間は無駄な仮押さえが残ってしまうのでちょっと気にしてました。
2と3の間の場合、決済で時間がかかった方がいると追い抜かれてしまうという同じ問題にあたってしまうかなと思いました。

ワークフローや画面を分けてもワークフローを連続して実行することできますでしょうか。出来たら確かに解決です!
ワークフローを分けた場合連続実行できないと思っていたので、連続で実行できないと2から4までの時間が空いてしまって、他の購入者に追い抜かれてしまう可能性が上がると考えて諦めてました。

ワークフローや画面を分けてもワークフローを連続して実行することできますでしょうか。出来たら確かに解決です!
ワークフローを分けた場合連続実行できないと思っていたので、連続で実行できないと2から4までの時間が空いてしまって、他の購入者に追い抜かれてしまう可能性が上がると考えて諦めてました。

例えば少し無理矢理感はありますが、

  • stripeから戻った際に、customstateの値をyesに変更
  • customstateの値をyesならという条件をDo when condition is true でList shifterを実施

ではいかがでしょうか。

「いいね!」 1

ありがとうございます!
すごくいい案だと思って試してみたのですが、List Shifterで同じエラーが出てしまいました・・・
ワークフロー分けてもダメなようです。