Doorkeeper
ニュース

問題の報告:決済時におけるエラーメッセージの表示

2018-09-06(木)

8月31日、ある参加者がイベントの支払いを試みました。しかし、クレジットカード情報の入力が完了した際、Doorkeeperがクラッシュし、一般的なエラーメッセージが表示されました。当該の参加者からDoorkeeperにエラー発生について報告、支払い状況の確認を依頼する連絡がありました。

Doorkeeperによる調査で、決済が処理されなかったことを確かめ、当該参加者のクレジットカードへの再決済手続きを手動で実行しました。この再決済が問題なく処理されたことから、当該参加者に対してチケットメールを送信し、問題が解決されたことをお伝えしました。

イベント申し込みに関わるすべての問題を公表するとお伝えした先日の発表に基づき、本件について報告します。

問題のタイムライン

2018-08-31

当該の参加者はStripeを通してクレジットカード情報を提出し、StripeからDoorkeeperへトークンが返信されました。そのトークンを使って課金を作成する際、Stripe側で問題が発生したことを示すエラーがStripeのAPIから返信されました。Doorkeeperではこのタイプのエラーに対して明示的に対応していないため、参加者へは一般的なエラーメッセージが表示されました。また、この動作により、当該問題が発生したことを知らせる自動警告が発動しました。

エラーメッセージを見た参加者は、Doorkeeperに連絡。Doorkeeperでは、決済が処理されなかったことが確認されました。当該参加者が支払いプロセスの手続きを再度進められるよう、Doorkeeperは当該の申し込みの「決済処理中」の状態を削除し、当該参加者に対して、再度決済を試みてもらうようお願いしました。

DoorkeeperからStripeへ連絡し、今後このような問題に対してよりよく対応できる方法がないかを尋ねました。Stripeからは、Doorkeeper側で再度決済をリトライできるとの指摘がありました。

当該参加者がまだ決済をしていないことを確認した後、Doorkeeperにて再度決済を試みたところ、問題なく決済が完了し、当該参加者にはチケットが送信されました。再び当該参加者に連絡し、Doorkeeper側で決済を完了できたこと、そしてご自身で決済をしていただく必要がなくなったことを伝えました。Doorkeeperは当該イベントの主催者にも連絡を取り、この問題の発生と解決について報告しました。

2018-09-04

Doorkeeperでは、以前は対応していなかったエラーコードがStripeのAPIから返信された際のエラー対応方法を改善しました。

問題の原因と改善

参加者に課金を試みるためにStripeから受信したトークンを使用した際、StripeのAPIから、Stripe側で問題が発生したことを示すapi_errorというコードが含まれたエラーが返信されました。Doorkeeperではこのタイプのエラーに対して明示的に対応していなかったため、アプリケーションがクラッシュし、一般的なエラーメッセージが表示されました。

Stripeのドキュメントによると、「APIエラーにはStripeのサーバの一時的な問題など、その他のあらゆるタイプの問題が含まれており、極めて稀である」とのことでした。実際、DoorkeeperがStripeを導入して以降、本件以外には2016年2月に一度だけ同じエラーを受信していました。とはいえ、Doorkeeperはこのようなエラーにも抜かりなく対応すべきであったと考えています。

今回のようなエラーに対して、私たちには矛盾する二つの目標があります。一つは、理想的にはDoorkeeperの介入の必要なく、できる限り迅速に解決可能としたいということ。もう一つは、参加者に多重課金をすることになるなど、状況を悪化させる可能性は回避したいということです。

このようなエラーの発生は極めて稀であることから、同様のエラーが発生した場合において、参加者に再度課金を試みる自動対応の採用は見送ることにしました。その代わり、参加者には決済が処理されていることを示すメッセージを表示し、問題発生を知らせる警告を自動的にDoorkeeperに対して送信することで対応したいと思います。また、今後同じような問題を迅速に特定できるよう、このような状況にどう対応すべきかを明確に記したドキュメントも追加しました。