Slate Errors

Client Error

402

Payment Required

— 支払いが必要です

まずは確認: よくある原因 TOP3

  1. 一部の決済 API による独自利用
    Stripe など、サブスクリプション切れや与信失敗で 402 を返す事例
  2. 試験運用中の有料機能
    課金プランが必要な機能に未契約で叩いたとき
  3. フレームワークのデフォルト応答
    課金フローが未実装で、暫定的に 402 を返している

何が起きたのか?

402 は「将来、支払いに関わる仕組みのために確保された席だけれど、まだ正式な使い方は決まっていない」というサインです。 教室で言えば、黒板の隅に「ここはあとで使う予定」と書かれた小さな枠があって、まだ誰も使っていない——そんな静かな予約席のような状態です。

仕様としては HTTP の初期から存在しますが、標準化された使い方は定まっていません。実務では Stripe など一部の決済 API が独自に「カードの与信に失敗した」「サブスクリプション切れ」などのケースで返すことがあります。

黒板からのひとこと

学校でも、教室の片隅に「来年度の新しい部活のために残しておく棚」があったりします。今は何も置かれていないけれど、将来のために空けてある。402 はちょうどそんな空き枠で、いざ Web 上で「お金が絡む」場面が標準として定まったとき、すぐに使えるよう確保された番号です。

ですから 402 を見たときは、まず「どの API が、どの意味で返しているのか」をドキュメントで確認するのが先決になります。標準ではなく、アプリ独自のルールが書かれているはずです。

解決への歩み

大丈夫、次はこうしてみよう:

  1. API のドキュメントを読む:そのサービスが 402 をどんな意味で使っているか確認する
  2. 支払い・契約状況を確認:プランが期限切れになっていないか、カードの与信が通っているか
  3. レスポンスボディの説明を読む:多くは具体的な理由(失敗した請求 ID など)が書かれている
  4. エラー応答の方針を整理(管理者向け):標準外の利用なら、利用者向けに 402 の意味と対処を明記する

実際にはこう見える

$ リクエスト

curl -i https://example.com/some/path

↓ レスポンス

HTTP/1.1 402 Payment Required
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html><body><h1>402 Payment Required</h1></body></html>

似ているケース

もっと知りたい