プラグイン > バグ報告・利用に関する質問 > GMOイプシロン決済時の商品在庫数減タイミング |
バグ報告・利用に関する質問
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yt1969 |
投稿日時: 2018/3/3 22:26
対応状況: −−−
|
一人前 登録日: 2018/3/3 居住地: 投稿: 91 |
GMOイプシロン決済時の商品在庫数減タイミング [EC-CUBE] 3.0.15 アップデート
[レンタルサーバ] さくらのレンタルサーバ スタンダード [OS] FreeBSD 9.1-RELEASE-p24 [PHP] 7.1.14 [データベース] MySQL 5.5.59 [WEBサーバ] Apache/2.4.29 [導入プラグインの有無] キャンセル時 在庫を自動で戻します 最近チェックした商品 Facebook連携プラグイン GmoEpsilon メール設定プラグイン OrderPdf 配送伝票番号プラグイン サイトマップ 独自プラグイン数種類 [現象] 本番環境において、在庫数1の商品を2人の顧客が購入してしまいました。 当該商品の商品マスター在庫数が-1になっています。 注文番号107 受注日:2018/03/03 20:04:41 入金日:2018/03/03 20:05:32 注文番号108 受注日:2018/03/03 20:05:39 入金日:2018/03/03 20:07:03 いずれもGMOイプシロンのクレジットカード決済で、ほぼ同時刻に同じ商品を買ってしまった様です。 〜〜 以下、EC-CUBE3.0.15インストール直後の状態での確認です。 状況設定は、「在庫数が1しかない商品を顧客のAとBがほぼ同時に購入しようとしている」です。 1. 顧客Aが商品をカートに入れる→レジに進む→…→ご注文内容のご確認 2. 顧客Bが同一商品をカートに入れる→レジに進む→…→ご注文内容のご確認 ここまではいずれの顧客にも在庫引き当てることなく処理が進み、 3. 顧客Aが「注文する」→ご注文完了 4. 顧客Bが「注文する」→購入エラー 選択された商品の在庫が不足しております。該当商品をカートから削除しました。 顧客Aが「注文する」押下時に在庫引き当てられて在庫数が-1され、顧客Bに商品が販売されるようなことはない。 → つまりEC-CUBE本体の問題ではないと考えます。 〜〜 ところが、GMOイプシロンで決済する場合、ご注文内容のご確認画面で支払い方法にクレジットカードを選択し、「次へ」を押下すると、顧客AもBも同一商品を持ったままクレジットカード決済に進んでしまい、支払いできてしまい、両者ともにご注文完了となってしまいます。ここで在庫は合わせて2引かれ、-1となる。 これが今回起きた事象だと考えており、GMOイプシロン決済プラグインの在庫減タイミングが適切でないような気がするのですが、いかがでしょうか。 他の決済プラグインではこのような事象は起きないようになっているのでしょうか。 当方ほとんどが一点物の取り扱いのため、今回の処置としては後続の方にお詫びして諦めていただく他ないのですが、 このような事象が起こるようではECサイトとしてはNGと捉えており、原因究明と再発防止策を取りたいと考えています。 皆様のお知恵をお貸しください。 |
umebius |
投稿日時: 2018/3/4 16:02
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: GMOイプシロン決済時の商品在庫数減タイミング GmoEpsilonプラグイン(version: 1.1.1)の注文処理に制御を加えている部分を見ると、確かにEC-CUBE本体の在庫チェックの部分をスキップしてしまっているように見えます。
具体的にはPlugin\GmoEpsilon\GmoEpsilon::onControllerShoppingConfirmBefore です。 ちゃんと検証はしておりませんが、プラグインが原因であればこの箇所に修正が必要になるかと思います。 一方IPSのプラグインは在庫チェックを通っているように見えますので、プラグインによって挙動が違う可能性があります。
|
yt1969 |
投稿日時: 2018/3/4 22:23
対応状況: −−−
|
一人前 登録日: 2018/3/3 居住地: 投稿: 91 |
Re: GMOイプシロン決済時の商品在庫数減タイミング umebius 様
返信ありがとうございます。 EC-CUBE本体の購入処理 Eccube\Controller\ShoppingController::confirmの直前にフックされて動作するところですね。 まだパッと見ただけですが Plugin\GmoEpsilon\GmoEpsilon::onControllerShoppingConfirmBeforeを辿っていくと Plugin\GmoEpsilon\Controller\PaymentController::index Plugin\GmoEpsilon\Service\Client\GmoEpsilon_Credit::payProcess ここでイプシロンサイトに遷移してカード情報入力、決済となるようです。 この間ずっと在庫はいじっていなさそうなので、前例にした顧客AとBが単一の商品に対して支払いができてしまうということですよね。 これを避けるためには、GmoEpsilonプラグインに制御が移る前にEC-CUBE本体の購入処理の途中くらい(Eccube\Service\ShoppingService::processPurchaseあたり?)まで進めて在庫減らしておくとかで、後続の顧客Bがイプシロンサイトに遷移前に在庫無くなったことを知れるようにすれば、、、 んー、エラー時に戻すことも含めてかなり弄らないといけないような気になってきました。。 |
umebius |
投稿日時: 2018/3/5 9:15
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: GMOイプシロン決済時の商品在庫数減タイミング 少なくともGmoEpsilon_Credit::payProcessでは在庫チェック必要ですよね。
こちらってリンク型の決済なのですね。トークン型等だと悩まなくていい問題だと思うのですが。 ご指摘の通り、イプシロンの決済ページに移る前に在庫を確保しないといけないというのはかなり難易度高いですね。
|
yt1969 |
投稿日時: 2018/3/13 20:12
対応状況: −−−
|
一人前 登録日: 2018/3/3 居住地: 投稿: 91 |
Re: GMOイプシロン決済時の商品在庫数減タイミング プラグイン開発元となるイプシロンカスタマーサポートに問い合わせてみました。
回答そのまま貼り付けるのも何ですので要約しますと、現状対応しかねるが前向きに検討しますとのこと。 ちなみに、「リンク型決済を考慮した機能」がEC-CUBE3系では実装されていない為に、他社の決済プラグインでもリンク型の場合同じ状況だそうです。 その機能はEC-CUBE2系では実装されていたそうなんですが、具体的なことは私にはわかりません。 んー、なかなか運用でカバーしきれないところですので、、これは困りました。 |
nanasess |
投稿日時: 2018/3/14 9:30
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: GMOイプシロン決済時の商品在庫数減タイミング 厳密にいうと、トークン式でもカード番号を入力する前に在庫を確保し、決済完了しなかった場合は戻すようにしないと同じようなことになると思います。
3系でも、一部のリンク式決済は、きちんと先に在庫確保しているものもあるんですけどね。 |
yt1969 |
投稿日時: 2018/3/14 16:05
対応状況: −−−
|
一人前 登録日: 2018/3/3 居住地: 投稿: 91 |
Re: GMOイプシロン決済時の商品在庫数減タイミング nanasess 様
返信ありがとうございます。 GMOイプシロンではクレジットカード決済でトークン方式も使えるようです(プラグインではリンク式のみ)が、コンビニ決済なども利用したい(こちらはリンク式のみ)ため、単にトークン式にすれば解決するとも思っておりません。ご指摘のように、何らかの決済プロセスに入った時に在庫を確保させたいと考えます。 先に在庫確保するリンク式決済もあるのですね、コードを参考にしたいですね。。。 |
nanasess |
投稿日時: 2018/3/15 9:03
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: GMOイプシロン決済時の商品在庫数減タイミング 確か、ソニーペイメントや、ルミーズはそうしていたかと思います。
|
yt1969 |
投稿日時: 2018/3/15 21:43
対応状況: −−−
|
一人前 登録日: 2018/3/3 居住地: 投稿: 91 |
Re: GMOイプシロン決済時の商品在庫数減タイミング nanasess 様
情報ご提供ありがとうございます。 ちょっと時間割いて他の決済プラグイン覗き見してみます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |