ハコヅミを作る #75:支払いが失敗したとき(払い直しのあいだは有料のまま、時計を進めて2つの道を通す)

#74 で、有料プランの申し込みと解約を作りました。今回は、その続きです。毎月の引き落としが失敗したときに、どうするかを作りました。

  • 何が起きるか
  • 回数とメールは、Stripe に任せる
  • 払い直しのあいだは、有料のまま知らせる
  • 全部失敗したら、無料のプランに戻す
  • 出さないことにした「M月D日ごろ」
  • 時計を進めて、2つの道を通す
  • 失敗するはずのカードで、払えてしまった
  • 一緒に入れた、小さな直し

何が起きるか

月額の有料プランは、毎月、同じ日に、カードから引き落とします。カードの期限が切れていたり、限度額を超えていたりすると、引き落としが失敗します。

失敗したからといって、すぐに有料プランを止めると、使っている人にとっては突然すぎます。でも、払われないまま、ずっと有料のままにもできません。

そこで、こう決めました(決めたのは、課金を作り始める前の #72 のころです)。

  1. 失敗したら、しばらくのあいだ、払い直しを試す。そのあいだは有料のまま
  2. そのあいだに、本人にカードを変えてもらう
  3. 払い直しが全部失敗したら、有料プランを終わらせて、無料のプランに戻す

回数とメールは、Stripe に任せる

払い直しを、いつ、何回するか。失敗したことを、メールでどう知らせるか。どちらも、ハコヅミでは作らず、Stripe の設定に任せました。

払い直しは、Stripe の「スマートリトライ」を使います。Stripe が、払えそうな時間を選んで、2週間のあいだに、最大8回まで払い直します。

Stripe の「サブスクリプションの再試行を管理」の画面。カード決済で Smart Retries がオン、「2週間で最大8回リトライ」

払い直しの回数と期間は、Stripe の既定のまま

払い直しが全部失敗したときにどうするかも、Stripe の設定で決めます。「サブスクリプションをキャンセル」にしました。キャンセルされると、Stripe からハコヅミに知らせが届き、ハコヅミが無料のプランに戻します。

Stripe の「決済失敗を管理」の設定。最初の決済試行が失敗した場合は「サブスクを期限超過のままにする」、支払いのリトライがすべて失敗した場合は「サブスクリプションをキャンセル」

最初に失敗したら「期限超過」のまま、全部失敗したら「キャンセル」

メールも、Stripe から送ります。ハコヅミには、まだメールを送る仕組みがありません。「カード決済が失敗した場合」と「有効期限が近いカード」のメールをオンにしました。

ここで1つ、Claude Code が気づいたことがあります。メールをオンにすると、「カードを変えるリンクの行き先」という欄が出てきました。その行き先が、本番のハコヅミの URL になっていたのです。テスト用の Stripe から、本番のサイトへ誘導するのはおかしいので、Stripe のページで直接カードを変えられる形に変えました。


払い直しのあいだは、有料のまま知らせる

払い直しのあいだ、ハコヅミの側でするのは、知らせることだけです。

アカウントの画面に、赤い枠で「お支払いができませんでした」と出します。すぐ下の「契約を管理する」から、Stripe の画面でカードを変えられます。

ハコヅミのアカウントの画面。会員区分「有料」の下に、赤い枠で「お支払いができませんでした」と、カードを確かめてほしいという説明。その下に「契約を管理する」のボタン

払い直しのあいだのアカウントの画面(架空のデータ)

アカウントの画面は、毎日開く画面ではありません。気づかないまま無料のプランに戻らないように、トップページの一番上にも、短い知らせを出しました。

ハコヅミのトップページ。タイトルの絵の下に、赤い枠で「有料プランのお支払いができませんでした。アカウントの画面で、カードを確かめてください。」と「アカウントの画面へ」のリンク

トップページの一番上にも出す(架空のデータ)


全部失敗したら、無料のプランに戻す

払い直しが全部失敗すると、Stripe が契約をキャンセルし、ハコヅミは無料のプランに戻します。#72 で決めたとおり、上限を超えている画像は消しません。新しい登録だけが、できなくなります。

戻ったあとは、アカウントの画面に「お支払いができなかったため、無料のプランに戻りました。」と出します。

ハコヅミのアカウントの画面の一部。赤い字で「お支払いができなかったため、無料のプランに戻りました。」、その下に有料プランで増えるものの説明と「有料プランにする」のボタン

無料のプランに戻ったあと

ここで、迷ったことがあります。契約が終わる理由は、支払いの失敗だけではありません。本人が解約して終わることもあります。本人が解約したのに「お支払いができなかったため」と出たら、驚かせてしまいます。

Stripe の契約には、終わった理由が入っています。支払いの失敗なら「payment_failed」、本人の解約なら「cancellation_requested」。この理由をハコヅミのデータベースにも残して、支払いの失敗のときだけ、この知らせを出すことにしました。

もう一度申し込むと、新しい契約で置き換わるので、知らせは消えます。


出さないことにした「M月D日ごろ」

Issue を書いたときは、「M月D日ごろまでに払えないと、無料のプランに戻ります」と、日付を出すつもりでした。

作る段になって、Claude Code が、この日付は今のしくみでは分からない、と教えてくれました。ハコヅミが受け取っているのは、契約の状態が変わったという知らせだけです。次に払い直す日は、別の種類の知らせ(請求書の知らせ)にしか入っていません。

日付を出すには、Stripe で受け取る知らせを増やし、その処理も作る必要があります。そこまでして日付を出すより、「決まった回数の払い直しが終わると、無料のプランに戻ります」と書くほうがよい、と決めました。メールでも知らせるので、それで足りると考えました。


時計を進めて、2つの道を通す

確かめたいのは、2つの道です。

  1. 失敗する → カードを変える → 続く
  2. 失敗する → 払い直しも全部失敗する → 無料のプランに戻る

#74 と同じく、Stripe のテストクロック(時計を進める仕組み)を使いました。Stripe には、テスト用に「顧客に付けることはできるが、引き落としは必ず失敗するカード」があります。

1つ目の道。時計を次の請求日のあとまで進めると、引き落としが失敗し、Stripe の契約は「期限超過」になりました。ハコヅミのアカウントの画面とトップページに、赤い知らせが出ました。「契約を管理する」から Stripe の画面に移ると、「支払いに失敗しました」と出ていました。

Stripe の契約の管理の画面。「支払いに失敗しました」の札と、「失敗した金額を支払う」のボタン。決済手段の一覧と、請求履歴に失敗した請求が1つ

Stripe の管理の画面で、カードを変えて払い直す

成功するカードを足して、「失敗した金額を支払う」を押すと、請求が「支払い済み」になりました。ハコヅミに戻ると、赤い知らせは消えて、「次の支払いの日」が出ていました。

2つ目の道。もう一度、失敗するカードだけにして、時計を4週間ほど先まで進めました。払い直しが全部失敗し、Stripe の契約は「キャンセル済み」になりました。ハコヅミでは、会員区分が「フリー」になり、「お支払いができなかったため、無料のプランに戻りました。」が出ました。


失敗するはずのカードで、払えてしまった

1つ目の道は、すんなりとはいきませんでした。

最初は、こうしました。成功するカードで契約を作り、そのあとで、失敗するカードを顧客の「デフォルト」にする。そして、時計を次の請求日のあとまで進める。

ところが、引き落としは成功してしまいました。

Claude Code の見立ては、こうでした。ダッシュボードで契約を作ったときに、契約そのものに、成功するカードが支払い方法として付いた。Stripe は、顧客のデフォルトのカードより、契約に付いたカードを先に使う。だから、デフォルトを変えても、成功するカードで払われた。

成功するカードを顧客から消して、もう一度時計を進めると、今度は失敗しました。

これは、テストのときだけのつまずきです。でも、次に確かめる人(たぶん、未来のわたし)が同じところで迷わないように、確かめ方の手順書に書き足すことにしました。


一緒に入れた、小さな直し

#74 の最後に書いた直しを、今回の変更に一緒に入れました。

1つは、「有料プランにすると、画像をたくさん登録できます」の「たくさん」です。上限の表から数を読んで、「画像を 500 枚まで登録できます(無料のプランは 50 枚)」と出すようにしました。上の「無料のプランに戻ったあと」の画像に、その文が写っています。

もう1つは、トップページの「使い方」のリンクを外したことです。使い方のリンクは、どの画面にも、下のほうに出ているからです。

本番には、まだ Stripe の鍵を入れていないので、支払いの失敗の知らせは出ません。本番で見える変化は、トップページの「使い方」のリンクがなくなったことだけです。


おわりに

  • 払えなかったら、すぐ止めない。払い直しのあいだは、有料のまま知らせる
  • 回数とメールは、任せられるところに任せる。自分で作るのは、知らせだけ
  • 終わった理由を残して、知らせを出し分ける。本人の解約を「支払いの失敗」と言わない
  • 分からない日付は、出さない。手間をかけて出すより、言い方を変える
  • テストのカードの順番で、つまずいたら、手順書に書いておく。次に迷うのは、未来の自分

次は、有料プランの休止の予定です。

テスタを募集しています。キャンプに行く方、よければ、触ってみてください。

← トップページに戻る