更新情報
今回のバージョンアップには、新しい機能は追加されておりませんが、重要なアップデートが含まれているため特別に更新情報を掲載しております。
| 項目名 | 値 |
|---|---|
| リリース日 | 2026/1/23 |
| 対応PHPバージョン | 8.2(変更なし) |
| 対応WordPressバージョン | 6.7.x 〜 6.8.x(変更なし) |
| 対応Stripeのバージョン | 2025-02-24.acacia(変更なし) |
| 対応SWELLバージョン | 2.15.0(変更なし) |
| 対応Genesis Frameworkバージョン | 3.6.1(変更なし) |
Chromeでの申込みエラーの解消
概要
2026年1月に入ってから、Chromeブラウザでの申し込み時にエラーが発生する事象を確認いたしました。絶対にエラーが発生するとは限らず、発生しないこともあります。
具体的には、申し込みボタンを押した直後に、エラーが表示されたり、エラーは表示されなくとも動作が停止してそれ以降の処理が実行されない事象が発生することがありました。
原因
本件について調査をした結果、以下のことが判明いたしました。
- 申し込みボタンを押した直後に会員サイトのサーバーに対して通信が発生しますが、それと同時に想定外の通信が発生していました。
- この想定外の通信はChromeによって自動的に発生したもので、技術的にはプリフェッチと呼ばれる通信でした。
- これにより実質的にページがリロードされたような状態となり、セキュリティ上必要なトークンが再発行されてしまった結果、正規の通信のセキュリティチェックに失敗して処理がエラーになるという事象が発生していました。
- ただし、このプリフェッチ通信が処理されるタイミングによってはエラーにならないこともあるため、エラーになったりエラーにならなかったりということが発生していました。
- Chrome以外のブラウザ(例えばSafariブラウザ)では、このような想定外の通信は発生しないため、エラーは発生しません。
対応方法
今回のアップデートで、申し込みページでのプリフェッチ通信を無視するように実装することでエラーが発生しないように対応いたしました。
Stripe決済と契約の不整合への対応
概要
ごく稀に、Stripe上で決済は成功しているのに、Luxlinerを使った会員サイト上で契約が作成されないという事象が確認されておりました。
原因
例1:ログインセッションが切れる
以下のような操作をすることで、この事象を意図的に発生させることが可能です。
- 会員サイトにログインした状態で申し込みページを表示する。(申し込みページでログインしても同様)
- 申し込みボタンを押して、3DS認証ダイアログが表示されることを確認。
- ブラウザの別のタブで会員サイトを開き、会員サイトからログアウトする。
- 申し込みページを表示している画面のタブに戻り、3DS認証を成功させる。
- ブラウザでエラーが表示される。
上記の手順を踏むと、Stripe上で決済は成功しますが、会員サイトに処理が戻ってきたときにはすでにログアウトされているためセッションが切れており、処理が続行できずにエラーとなり、契約が作成されないという事象が発生します。
よほどのことがない限り意図的にログアウトをするということはないと思いますが、3DS認証が表示された後にあまりにも長い時間放置した後に3DS認証の処理を続行して成功した場合は、すでに自動的なログアウトが実施されていた場合に同様の事象が発生する可能性があります。
例2:不安定な通信状態
ログイン状態に関係なく通信状態が不安定な場合に同様の事象が発生する可能性があります。
- 申し込みページを表示する。(= 会員サイトのサーバーとこの時点では通信可能だった)
- 3DS認証ダイアログが表示され、3DS認証が成功する。(= Stripeサーバーとも通信できた)
- 上記2つの通信が成功したにもかかわらず、3DS認証が成功した後に、会員サイトのサーバーとの通信に失敗し、契約が作成されない可能性がある。
3DS認証が必須となったことで、申し込みボタンを押してから実際に決済して契約が作成されるまでに最低でも数分間のタイムラグが発生するようになりました。3DS認証では、一般的に個人のメールアドレスに対してワンタイムパスワードが送られてくるため、メールを確認する必要があるためです。
このため、通信状態が不安定な場所で申し込み等をした場合(例えば電車の中など)、決済だけされて契約が作成されないリスクが増えました。
対応方法
Luxlinerは特殊な申し込みページの機能(オプション契約やワンタイムオファーなど)を実現するため、かなり複雑な申し込み処理を実装しています。
このため、上記の問題に完全に対応しようとすると、申し込み処理を最初から作り直すくらいの大幅な変更が必要でした。また、実装方法を変えて最初から作り直した場合、これまで利用できていたワンタイムオファーなどの機能を削除せざるを得ない可能性もありました。
このため、この事象自体がごくまれにしか発生しないこともあり、以下のような対応策を採用致しました。(技術的な説明となりますがご了承下さい)
具体的な対応策
- Stripeでの決済の成功イベントをすべて補足し、会員サイトのイベントデータベースに保存。(リッスン対象とするwebhookの追加)
- 一定時間ごとに、これらの決済成功イベントに対する契約もしくは購入履歴が作成されているかどうかをチェック。
- 契約もしくは購入履歴が作成されていない場合、Stripe上の決済を返金し、サブスクリプションを即時停止。また、決済と契約の不整合が発生したことを管理者にメールで通知。
- これらの処理により、Stripe上の決済と会員サイト上の契約に不整合が発生しないようにしました。
その他の細かい変更内容
- Luxlinerの設定画面での警告表示を抑制。(デバッグモード時のみ)
- その他細かい文言修正。
