402 Payment Required
使い方
402 Payment Required エラーが届いたとき、クライアントは要求したリソースへのアクセスが現時点では許可されていないと理解します。
予約済みステータス
402 Payment Required は将来の利用のために予約されています。現在その挙動は非標準であり、実装によって異なります。
これは非標準のレスポンスであるため、プロバイダーごとに異なる使い方がされてきました。たとえば Shopify の API は、オンラインショップが凍結されており、アクセスを回復するにはストア管理者が未払い残高を支払う必要があることを示すために 402 Payment Required を返します。
Stripe の API は、カードが拒否された場合や残高不足の場合など、支払いの試行が失敗したときに 402 Payment Required を返します。
SEO への影響
Google のような検索エンジンは、402 Payment Required ステータスを返す URL をインデックスしません。以前にインデックスされていた URL がこのステータスコードを返すようになると、検索結果から削除されます。
例
クライアントがリソースを要求し、サーバーは支払いが行われるまでアクセスがブロックされていることを示すために 402 Payment Required で応答します。レスポンスボディはその理由を説明し、問題を解決するためのリンクを提供します。
リクエスト
GET /tech-news HTTP/1.1
Host: example.com
レスポンス
HTTP/1.1 402 Payment Required
Content-Type: text/html
Content-Length: 187
<html>
<head>
<title>Payment Required</title>
</head>
<body>
<p>Access to this resource requires an active
subscription. Renew at /account/billing.</p>
</body>
</html>
対処方法
402 Payment Required は、アクセスを許可する前にそのサービスが支払いまたは有効なサブスクリプションを求めていることを意味します。このステータスは非標準であるため、対処方法はエラーを返す個々のサービスによって異なります。
支払いとサブスクリプションの状態を確認します。サービスのダッシュボードにログインし、アカウントが有効であることを確認します。トライアルの期限切れ、失効したサブスクリプション、未払い残高がこのステータスを引き起こします。Shopify は、未払いの請求によりストアが凍結されている場合に 402 を返します。Stripe は、請求が失敗した場合(カードの拒否、残高不足)に 402 を返します。
請求情報が最新であることを検証します。期限切れのクレジットカード、失敗した請求、削除された支払い方法はアクセスを阻みます。プロバイダーの請求ポータルを通じて支払い情報を更新します。支払い方法に保留や不正検知によるブロックがないか、カード発行会社に問い合わせて確認します。
API プランの制限を見直します。一部のサービスは、利用量が現在のプラン階層を超えると 402 を返します。プロバイダーの利用状況ダッシュボードでクォータの消費量を確認します。プランをアップグレードするか、請求サイクルのリセットを待ちます。
解決の手がかりを得るためにレスポンスボディを調べます。ほとんどのプロバイダーは、402 レスポンスのボディに具体的なエラーメッセージ、エラーコード、請求ページへのリンクを含めます。Stripe のレスポンスには、失敗の理由を特定する decline_code フィールド(insufficient_funds、card_declined、expired_card)が含まれます。
別の支払い方法で再試行します。特定のカードや銀行口座が失敗する場合は、別の支払い方法に切り替えて再送信します。一部のプロバイダーは、あらかじめ設定した予備の支払い元を利用できます。
API プロバイダーまたはサービス管理者に問い合わせます。402 の挙動は非標準であるため、正確な解決手順はプロバイダーのドキュメントが定めます。レスポンスボディに詳細がない場合は、リクエスト ID とタイムスタンプを添えてサポートチケットを起票します。
コードリファレンス
.NET
HttpStatusCode.PaymentRequired
Rust
http::StatusCode::PAYMENT_REQUIRED
Rails
:payment_required
Go
http.StatusPaymentRequired
Symfony
Response::HTTP_PAYMENT_REQUIRED
Python3.5+
http.HTTPStatus.PAYMENT_REQUIRED
Java
java.net.HttpURLConnection.HTTP_PAYMENT_REQUIRED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_PAYMENT_REQUIRED
Angular
@angular/common/http/HttpStatusCode.PaymentRequired