使用 Laravel 在 Stripe 上使用佣金格式化价格错误

Format price with commission giving error on Stripe using Laravel

我正在尝试向客户收费,然后在我自己和拥有该产品的所有者之间分摊付款。我 运行 遇到的问题是,如果产品的所有者(在本例中是一些文件上传)为其价格插入 99.99 之类的值,然后有人尝试去结账,一旦他们输入了他们的 Stripe 信用卡信息,他们收到此错误:

在那种情况下,产品的价格是 99.99 美元。

这里是我收费的地方:

 try {
     $charge = Charge::create([
    'amount' => $file->price * 100,
    'currency' => 'usd',
    'source' => $request->stripeToken,
    'application_fee' => $file->calculateCommission() * 100
 ], [
    'stripe_account' => $file->user->stripe_id
 ]);

这里是文件模型的 calculateCommission 方法:

public function calculateCommission() {
    return (config('marketplace.sales.commission') / 100) * $this->price;
}

config('marketplace.sales.commission') 在这种情况下只是 20 (20%)

如果用户输入的价格比方说 100($100),则收费成功

如何处理此小数格式的佣金?或者我做错了什么?

在您的情况下,您需要正确设置申请费的格式,此为 1999.8。而申请费应该是一个整数。您可以在申请费中添加舍入逻辑,它会起作用。

application_fee (CONNECT ONLY optional): A fee in cents that will be applied to the charge and transferred to the application owner's Stripe account. To use an application fee, the request must be made on behalf of another account, using the Stripe-Account header, an OAuth key, or the destination parameter. For more information, see the application fees documentation.

在你的情况下,它不是以美分 1999.8 为单位,它应该是 2000。

正如@spencdev 评论的那样,floor 似乎可以解决问题。我测试过它:

99.99, .87, 1219.77, 3.00, 10.01, 100.00

所有工作并完成 Stripe

floor($file->calculateCommission() * 100)