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

And*_*ndy 5 php e-commerce stripe-payments

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

\n\n

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

\n\n

据我所知,这意味着 \xc2\xa310.99 (不是 \xc2\xa31099)。但这在他们的文档中非常不清楚 - 我假设情况就是如此。

\n\n

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

\n\n
  "error": {\n    "code": "parameter_invalid_integer",\n    "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer",\n    "message": "Invalid integer: 10.99",\n    "param": "amount",\n    "type": "invalid_request_error"\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用 SagePay,您实际上会10.99按照金额发送。

\n\n

那么,使用 Stripe,您是否必须将所有金额转换为货币的单一基本单位(在英镑的情况下为便士),例如,如果金额为 \xc2\xa310.99,您需要(10.99 * 100)发送1099

\n\n

该文档实际上并没有明确说明这一点。如果您在他们的文档中阅读了 Decimal Amounts ( https://stripe.com/docs/billing/subscriptions/decimal-amounts ),它说您可以使用名为的参数amount_decimal,但如果通过他们的 API 发送,这也会给出错误:

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

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

\n\n
"error": {\n    "code": "parameter_unknown",\n    "doc_url": "https://stripe.com/docs/error-codes/parameter-unknown",\n    "message": "Received unknown parameter: amount_decimal",\n    "param": "amount_decimal",\n    "type": "invalid_request_error"\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的假设是,此错误是因为文档的这一部分指的是“计划”计费,而不是一次性付款。我想接受一次性发票的卡付款,因此已使用接受卡付款文档。

\n\n

所以我的问题是:您是否只以货币的最小单位发送金额(例如10.99 * 100\xc2\xa310.99),还是有其他方法可以将其作为小数传递(即10.99)?

\n

小智 7

记录在这里

\n\n
\n

所有 API 请求都希望以货币\xe2\x80\x99 的最小单位提供金额。例如,要收取 10 美元,请提供 1000(即 1000 美分)的金额值。对于零小数货币,仍以整数形式提供金额,但不乘以 100。例如,要收取 \xc2\xa5500,请提供金额值 500。

\n
\n\n

amount您永远不会在 Stripe API 中的任何位置传递小数点。大多数 API 端点不支持,除非在API 参考amount_decimal中明确列出。

\n