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