Php 从Stripe/PayPal计算支付费用-函数中的奇怪输出

Php 从Stripe/PayPal计算支付费用-函数中的奇怪输出,php,math,paypal,stripe-payments,percentage,Php,Math,Paypal,Stripe Payments,Percentage,我有下面的功能,计算支付费用,将去支付提供商(如条纹或贝宝) 我是基于以下内容制定的: 但是,当您增加要求Stripe收取的总金额时,您也在增加Stripe费用,因为Stripe的定价是固定费用加上总费用的一个百分比。所以,你需要计算出你需要收取的总金额,这样,在Stripe扣除其费用后,你会收到一些可预测的净金额 这其实是一道数学题,并不像听起来那么简单,但为了节省一些计算: 我认为我的职能应该在百分比较低(即2.9%、5%等)的情况下发挥作用。但是随着百分比的增加,输出看起来很奇怪,我认为

我有下面的功能,计算支付费用,将去支付提供商(如条纹或贝宝)

我是基于以下内容制定的:

但是,当您增加要求Stripe收取的总金额时,您也在增加Stripe费用,因为Stripe的定价是固定费用加上总费用的一个百分比。所以,你需要计算出你需要收取的总金额,这样,在Stripe扣除其费用后,你会收到一些可预测的净金额

这其实是一道数学题,并不像听起来那么简单,但为了节省一些计算:

我认为我的职能应该在百分比较低(即2.9%、5%等)的情况下发挥作用。但是随着百分比的增加,输出看起来很奇怪,我认为函数不知怎么搞砸了,或者我不太明白应该如何收取费用。这两种情况都是可以想象的

输出:

calcPaymentFee(100, 0, 0.029) // 2.9%: 2.987 (seems correct, this tool gives same output: http://thefeecalculator.com/stripe/) 
calcPaymentFee(100, 0, 0.1) // 10%: 11.111 (seems correct)
calcPaymentFee(100, 0, 0.5) // 50%: 100.0 (?!? - makes no sense)
我真的不明白为什么要付100英镑。如果我传入“0.5”作为第三个参数,我会想象它大约是50%。也许我误解了什么,但这似乎很奇怪

我想要达到的目标 我希望计算Stripe或PayPal将收取的费用,然后将此费用支付给客户

因此,如果我以100美元的价格出售某件物品,而条纹费为2.9%,我将向客户收取102.9美元


我目前不明白的是,如果我想以100美元的价格出售某件东西,我已经将费用设置为50%,我被告知要收取200美元。

实际上,50%的100美元费用是正确的

想象一下这个场景:

  • 顾客付200美元
  • 他们中有50%的人选择银行。=>100美元
  • 你得到100美元(200美元的50%)

下面是一些计算相同内容的基本脚本:

<form method="post" target="<?php echo $_SERVER['PHP_SELF']; ?> ">
    <input type="text" name="amount">
    <input type="submit" name="submit" value="Calculate"> 
</form>

<?php
    $fixed = 0.3;
    $percent = 0.029;        
    function calcPaymentFee($amount) {
        global $fixed, $percent;
        $arr = array();
        $arr['fee'] = ($amount * $percent + $fixed);
        $arr['net'] = $amount - $arr['fee'];
        return $arr;
    }

    function calcTotal($amount) {
        global $fixed, $percent;
        $arr = array();
        $r = (100 - $percent*100) / 100;
        $arr['total'] = ($amount + $fixed) / $r;
        $arr['fee'] = $arr['total'] - $amount;
        return $arr;
    }

    if (isset($_POST['submit']) && !empty($_POST['amount'])) {
        $left = calcPaymentFee($_POST['amount']);
        $right = calcTotal($_POST['amount']);
        printf('Amount: %.2f<br>', $_POST['amount']);
        printf('Fee: %.2f<br>', $left['fee']);
        printf('Net sum: %.2f<br>', $left['net']);
        echo '<br>';
        printf('If you want net sum of %.2f you must ask for:<br>', $_POST['amount']);
        printf('Amount: %.2f<br>', $right['total']);
        printf('Fee: %.2f<br>', $right['fee']);
    }
?> 
简而言之,
calcPaymentFee
函数中的公式有点错误,必须是:

return ($amount * $percent + $fixed);

我不明白。如果您希望收到100美元,并且在处理过程中您必须支付50%的费用,那么您将收取100美元的费用。所以总共是200美元,这是由100美元的费用和100美元的价格加起来的。出什么问题了?你是不是在想办法向客户收取信用卡费用?还是你只是想弄清楚基本费用是多少?@oleg liski回答说+我更新了我的问题,以便更好地解释我不明白的地方
Amount: 100.00
Fee: 3.20
Net sum: 96.80

If you want net sum of 100.00 you must ask for:
Amount: 103.30
Fee: 3.30
return ($amount * $percent + $fixed);