Stripe - 如何将小数金额发送到 API 以进行付款?

Stripe - How do you send decimal amounts to the API for a Payment?

我正在将一个电子商务平台从使用 SagePay 迁移到 Stripe。

文档显示使用 1099amount 数字和 gbp 的货币(https://stripe.com/docs/payments/accept-a-payment#web-create-payment-intent)。

据我所知,这意味着 10.99 英镑(不是 1099 英镑)。 但这在他们的文档中非常不清楚 - 我假设是这种情况。

如果我尝试通过他们的 API 发送 amount => 10.99,我会在响应中收到一条错误消息:

  "error": {
    "code": "parameter_invalid_integer",
    "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer",
    "message": "Invalid integer: 10.99",
    "param": "amount",
    "type": "invalid_request_error"
  }

使用 SagePay,您实际上会发送 10.99 作为金额。

因此,对于 Stripe,您是否必须将所有金额转换为货币的单一基本单位(对于英镑,即便士),例如,如果金额为 10.99 英镑,您会这样做 (10.99 * 100) 然后发送 1099?

文档实际上并没有说清楚。如果你在他们的文档中阅读了小数金额 (https://stripe.com/docs/billing/subscriptions/decimal-amounts),它说你可以使用一个名为 amount_decimal 的参数,但是如果通过他们的 API:[=28 发送,这也会出错=]

$intent = \Stripe\PaymentIntent::create([
    'amount_decimal' => 10.99,
    'currency' => 'gbp',
    // Verify your integration in this guide by including this parameter
    'metadata' => ['integration_check' => 'accept_a_payment'],
]);

导致错误,指出参数 amount_decimal 未知(即使它在他们的文档中?):

"error": {
    "code": "parameter_unknown",
    "doc_url": "https://stripe.com/docs/error-codes/parameter-unknown",
    "message": "Received unknown parameter: amount_decimal",
    "param": "amount_decimal",
    "type": "invalid_request_error"
  }

我的假设是这个错误是因为文档的这一部分指的是 "plans" 的计费而不是一次性付款。我想接受一次性发票的卡付款,因此使用了 Accept a Card Payment 文档。

所以我的问题是:您是只发送最小货币单位的金额(例如 10.99 * 100 表示 10.99 英镑),还是有其他方法可以将其作为小数形式传递 (即 10.99)?

已记录 here

All API requests expect amounts to be provided in a currency’s smallest unit. For example, to charge 10 USD, provide an amount value of 1000 (i.e., 1000 cents). For zero-decimal currencies, still provide amounts as an integer but without multiplying by 100. For example, to charge ¥500, provide an amount value of 500.

您永远不会在条纹 API 的任何地方为 amount 传递小数点。大多数 API 端点不支持 amount_decimal 除非它在 ​​API reference.

中明确列出

将您的货币转换为我在 php 中所做的美分 美元=42.20; bcmul($dollar, 100);