我有以下功能来计算支付费用(比如Stripe或PayPal)。
/**
* Calculate payment provider fee. As described in this article: https://support.stripe.com/questions/can-i-charge-my-stripe-fees-to-my-customers
*
*
* @param integer $amount The amount you wish to charge
* @param float $fixed The fixed fee on the gateway
* @param float $percent The percent fee on the gateway (0.029 = 2.9%)
* @return integer The fee that the gateway will charge
*/
function calcPaymentFee($amount, $fixed = 0.30, $percent = 0.029) {
$a = $amount+$fixed;
return round($a / (1 - $percent) - $amount, 3);
}
我是根据this article from Stripe开发的:
但是,当你增加你要求Stripe收费的总金额时,你也增加了条纹费用,因为Stripe的定价是固定费用加上总费用金额的百分比。因此,您需要确定需要收取的总金额,以便在Stripe扣除其费用后,您会收到一些可预测的净额。
这是一个数学问题,并不像听起来那么简单,但为了节省一些计算:
我相信在使用较低百分比(即2.9%,5%等)时,我的功能应该正常工作 - I tested output according to this tool。但随着百分比的增加,输出看起来很奇怪,而且我认为这个功能有些搞砸了,或者我没有正确理解如何收取费用。无论哪种情况都可以想象。
输出:
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美元。
答案 0 :(得分:1)
这里我们会找一些计算同样事情的基本脚本:
<form method="post" target="<?php echo $_SERVER['PHP_SELF']; ?> ">
<input ty
<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']);
}
?>
输出:
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
简而言之,calcPaymentFee
函数中的公式有点不对,必须是:
return ($amount * $percent + $fixed);
答案 1 :(得分:0)
实际上50%的100美元费用是正确的。
想象一下这种情况: