ハコヅミを作る #77:退会・凍結のときに契約を止め、規約を書き直す(課金の「作る」の締めくくり)

#76 で休止を作りました。今回は、課金の「作る」の最後です。

  • 退会したのに、引き落としが続く
  • 退会では、顧客ごと消す
  • Stripe で失敗したら、何も消さない
  • 凍結では、止め方を分ける
  • 凍結が失敗しても、凍結はする
  • 規約とプライバシーポリシーに書く
  • 手元で流さなかったテストが、落ちた
  • 課金の「作る」を終えて

退会したのに、引き落としが続く

ハコヅミの退会は、データをすぐに全部消します。ところが、これまでの退会は、ハコヅミの中しか消していませんでした。

有料の人が退会すると、ハコヅミの側からは、その人がいなくなります。でも、Stripe の契約は残ったままです。翌月になると、Stripe は、いつもどおりカードから引き落とします。使えないサービスに、払い続けることになります。

凍結も同じです。凍結された人は、アカウントの画面を開けないので、自分で解約できません。

そこで、退会と凍結のときに、Stripe の側も止めるようにしました。


退会では、顧客ごと消す

Issue には、「退会すると、Stripe の契約をすぐに止める」と書いていました。作る前に、Claude Code が、もう一歩進めた案を出してきました。

契約だけを止めるのではなく、Stripe の顧客を消す

Stripe の「顧客」は、契約の持ち主です。顧客を消すと、その人の契約も、その場で止まります。それだけでなく、Stripe が預かっていたメールアドレスとカードも消えます。

ハコヅミは、「退会すると、すぐに消える」と約束しています。契約だけを止めると、Stripe の中には、その人のメールアドレスとカードが残ります。顧客ごと消せば、Stripe の側でも、その約束を守れます。

ただし、支払いの記録(いつ、いくら払ったか)は、Stripe に残ります。お金の記録なので、法律で残すことが決まっています。プライバシーポリシーにも、そう書きました。

退会の確認の画面には、有料の人にだけ、一文を足しました。

ハコヅミの退会の確認の画面。「退会すると、次のデータがすべて消えます。元に戻せません。」と件数の下に、赤い字で「有料プランは、すぐに終わります。残りの期間の返金はありません。」

有料の人の退会の確認(架空のデータ)


Stripe で失敗したら、何も消さない

退会の処理は、もともと順番を決めてありました。招待の一覧 → 画像 → データベース。途中で失敗しても、やり直せる順番です。

Stripe を止める処理は、招待の一覧のあと、画像とデータベースの前に入れました。

理由は、Stripe の顧客の番号が、ハコヅミのデータベースにしかないからです。データベースを先に消すと、どの顧客を消せばよいか、分からなくなります。

そして、Stripe で失敗したら、退会はそこで止めます。データは何も消えていないので、もう一度やり直せます。もし逆に、データだけ消えて Stripe が残ったら、引き落としが続くのに、どの契約か分からない、という一番困る形になります。


凍結では、止め方を分ける

凍結のときは、Issue の案では「期間の終わりで解約」でした。払った分の期間は、そのまま残す形です。

Claude Code は、ここで、契約の状態によって分けたほうがよい、と言ってきました。

契約の状態 凍結したとき
有効 期間の終わりで解約(払った分は残す)
休止中 すぐに止める
支払いの払い直しのあいだ すぐに止める

休止中の契約には、「期間の終わり」がありません。解約の予定を入れても、休止したまま、ずっと残ってしまいます。

払い直しのあいだは、凍結したあとも、Stripe がカードからの引き落としを試し続けます。凍結された人から、お金を取ることになります。

#75 と #76 で作った状態が、ここで効いてきます。

管理画面で凍結するときの確認にも、そのことを書きました。

ハコヅミの管理画面の「凍結の確認」。「camper@example.com を凍結しますか?有料の契約があれば、契約も止まります(有効な契約は期間の終わりで解約、休止中・支払いの失敗のあいだは、すぐに止まります)。」と、「やめる」「凍結する」のボタン

管理画面の凍結の確認(架空のデータ)


凍結が失敗しても、凍結はする

退会とは逆に、凍結では、Stripe で失敗しても、凍結そのものは止めないことにしました。

凍結は、規約に反することをした人を、すぐに止めるためのものです。Stripe に届かないからといって、凍結できないのは困ります。凍結はしたうえで、管理画面に「Stripe のダッシュボードで、契約を止めてください」と出し、わたしが手で止めます。

退会では「失敗したら、全部止める」、凍結では「失敗しても、止めることを優先する」。同じ「Stripe を止める」でも、何を守りたいかで、失敗したときの動きを変えました。

開発環境で、テストクロックの契約がある人を凍結すると、Stripe の契約に「でキャンセル」の印が付きました。

Stripe の顧客の画面のサブスク。ハコヅミ 有料プランが「有効」で、「2027/01/25 でキャンセル」の印

凍結すると、期間の終わりで解約になる

凍結を解いても、この印は残ります。自動では、もとに戻しません。また使うときは、申し込み直してもらう決まりにしました。


規約とプライバシーポリシーに書く

#74 から作ってきた決まりを、利用規約とプライバシーポリシーにまとめて書きました。

利用規約には、「料金」の条に、有料プランの決まりを足しました。

  • 月額の契約で、料金の額は申し込みの画面に出す
  • 支払いはカードで、カードの番号は運営者には届かない
  • 毎月、自動で更新して払う
  • 解約はいつでもでき、払った期間の終わりまで有料。日割りの返金はしない
  • 休止、支払いができなかったとき、退会・凍結のときの扱い
  • 料金や内容を変えるときは、前もって知らせる

料金の額そのものは、規約には書きませんでした。まだ仮の額で、変えるたびに規約を改定するのは大変だからです。

プライバシーポリシーには、預かる情報(契約の情報)と、支払いに使う Stripe のことを足しました。ハコヅミから Stripe に渡すのは、利用者を見分ける番号だけです。メールアドレスとカードは、利用者が Stripe の画面で入れ、Stripe が預かります。

本番では、有料プランはまだ申し込めません。でも、規約は先に出しました。お知らせにも「有料プランは、まだ申し込めません。始めるときは、あらためてお知らせします」と書きました。


手元で流さなかったテストが、落ちた

1つ、失敗がありました。

凍結の確認の文を変えたので、それを確かめているテストも直しました。ところが、同じ文を確かめているテストが、もう1つありました。確認の画面の見た目を確かめるテストです。

ハコヅミでは、手元では、変えたところに関係するテストだけを流し、全部のテストは PR の CI で流す、と決めています(GitHub Actions の時間を節約するため)。そのもう1つを、手元で流すテストに入れていませんでした。CI で落ちて、気づきました。

Claude Code が、同じ文を探して、残りの1つを直しました。文を変えるときは、その文で探してから、流すテストを決めるほうがよさそうです。


課金の「作る」を終えて

これで、課金の「作る」は、全部終わりました。

回 作ったもの
#73 Stripe からの知らせを受け取る土台
#74 申し込みと解約
#75 支払いが失敗したとき
#76 休止
#77(この回) 退会・凍結のときと、規約

どれも、開発環境と、Stripe の練習用の環境だけで作りました。本番には、全部出してありますが、Stripe の鍵を入れていないので、課金の画面は見えません。

残りは「始める」です。本番の鍵と料金、特定商取引法の表記、テスタの方への約束(1年間の無料)を用意します。キャンプの季節が始まる前に、やる予定です。


おわりに

  • 退会で消すなら、外のサービスに預けたものも消す。契約だけでなく、顧客ごと
  • 外のサービスを止めるのは、自分のデータを消す前に。番号は、自分のところにしかない
  • 同じ「止める」でも、失敗したときの動きは、何を守りたいかで変える
  • 状態が増えたら、ほかの処理がその状態でどう動くかを、もう一度見る
  • 規約は、作ったものにあわせて書く。額のように変わるものは、規約に書かない
  • 文を変えたら、その文で探してから、流すテストを決める

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

← トップページに戻る