Calculate Paypal Fee

This calculates the Paypal transaction fee for a supplied amount, and adds it to the final amount (We used this to charge the Paypal fee back to the user as a booking fee on ticket sales for an event - before we discovered how terrible Paypal are for events:

The function will spit out an array containing:
- The Sub Total amount supplied as sub_total
- The Paypal Fee applied as paypal_fee
- The Grand Total, which is the two above added together, as grand_total

You have the option of rounding the fee up to the nearest whole number, or charging the user the exact transaction fee, just supply the second parameter in the function call as true.

The Paypal rates are set as variables inside the function itself, it's up to you to check what they are for your country and set them accordingly.

function paypalFees($sub_total, $round_fee) {
    // Set Fee Rate Variables
    $fee_percent = '3.4'; // Paypal's percentage rate per transaction (3.4% in UK)
    $fee_cash = '0.20'; // Paypal's set cash amount per transaction (£0.20 in UK)
    // Calculate Fees
    $paypal_fee = ((($sub_total / 100) * $fee_percent) + $fee_cash);
    if ($round_fee == true) {
        $paypal_fee = ceil($paypal_fee);
    // Calculate Grand Total
    $grand_total = ($sub_total + $paypal_fee);
    // Tidy Up Numbers
    $sub_total = number_format($sub_total, 2, '.', ',');
    $paypal_fee = number_format($paypal_fee, 2, '.', ',');
    $grand_total = number_format($grand_total, 2, '.', ',');
    // Return Array
    return array('grand_total'=>$grand_total, 'paypal_fee'=>$paypal_fee, 'sub_total'=>$sub_total);

/******** usage **********/
    $receipt = paypalFees('1021.57', false);
    <h2>Your Receipt</h2>
    <li>Sub-Total: &pound;<?php print $receipt['sub_total']; ?></li>
    <li>Booking Fee: &pound;<?php print $receipt['paypal_fee']; ?></li>
    <li>TOTAL: &pound;<?php print $receipt['grand_total']; ?></li>
  • Ben

    Hmm, that code appears to have been a bit messed up in the submission process! That closing bracket should be before the usage comment.

  • Paypal adds another 0.5% for payments outside EU. So if you receive payment from US for example it will charge you 3.9%+0.20

  • Maurice

    Not sure how to use this. I have a form on a site where people enter an amount and are sent to paypal to pay it when they clcik ‘submit’. I want them to enter an amount and have that amount plus the added paypal fees appear in a second box which will then be the amount they are charged when they click a submit button underneath. Either that or they enter the amount and the fees are automatically added when they click submit and appear as the total to be paid when they are redirected to paypal.

    Your code seems to be the closest I’ve found to achieving that but I’m not sure how to implement it. Could you expand on this a bit and give a step by step example of how to get from a form field with a submit button to the total plus fees appearing on the paypal payment page? Would be much appreciated.