HTTPQUERY
English

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