Stripe - 如何将小数金额发送到 API 以进行付款?
Stripe - How do you send decimal amounts to the API for a Payment?
我正在将一个电子商务平台从使用 SagePay 迁移到 Stripe。
文档显示使用 1099
的 amount
数字和 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);
我正在将一个电子商务平台从使用 SagePay 迁移到 Stripe。
文档显示使用 1099
的 amount
数字和 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);