支付失败时使用什么 HTTP 代码响应?

What HTTP code response to use when payment fails?

处理付款/处理信用卡时使用什么 HTTP 代码?

例如:

我正在发送 JSON 回复,所以我不太介意,但我想知道正确的代码是什么。

首先,重要的是要区分

  1. 由客户端造成
  2. 其他由服务器端问题引起的

后一种通常描述客户无法自行解决的错误。

第一个应该有400系列的状态码。其他的,服务器端引起的,状态码应该是500系列的。

我的建议

  • 资金不足

    • 我会建议 400(错误请求)以及有意义的错误消息。
  • 无法取回资金(没有给出原因时)

    • 500 (internat server error),如果根本原因很明显是服务器端。
    • 503(Service Unavailable),如果可以确定某些必要的web服务暂时不可用。 503 背后的意思是这个错误是暂时的,鼓励客户端稍后重试相同的请求。
    • 400(错误请求)如果根本原因是客户端的某种无效请求
  • 信用卡过期

    • 同样,我建议 400(错误请求)+ 错误消息

可在 here 中找到 return 个代码的完整列表。

前面的回答说的有道理。 重要的是您的 API 在决定​​响应代码后坚持其选择。 Here's a relevant Uber Eats bug caused by a payment provider changing their API.

我想补充一点,402(需要付款)可能正是您要找的。请注意,402 在发表此评论时被 MDN 宣布为“实验性”。查看 RFC introducing the 402 status code here.

MDN docs状态:

Sometimes, this status code indicates that the request cannot be processed until the client makes a payment. However, no standard use convention exists and different entities use it in different contexts.