Add payment method surcharge on single page checkout
You need to be careful here. Obviously you want to share with your customer that their order total will change, even slightly, before they pay. Often, most payment gateways strongly discourage passing on their fee to the customer, or flat out do not allow it. 

But let's assume you want to charge more for "Cash on Delivery."

According to the commerce_fee documentation, you have to use two pages.


  Notice: if using fees based on payment type, be sure to move the payment type pane to a screen before the review pane on admin/commerce/config/checkout so that customers can see the fee before accepting.


This requirement would prevent nearly all normal payment gateways that require an off-site-payment-redirect step after putting payment details into a form from functioning correctly, if at all.

One way to create a single page, with ajax is the following recipe:

Ingredients


Commerce Checkout Field Group
Field Group
Commerce Payment Methods Field - (I just created this module because it didn't exist, just gives you a field that is populated with payment methods available to that order).
Commerce Checkout Ajax


Directions

Add a payment method field to your order. Use field group and checkout field group to add this field to a checkout page. Use Rules to make only a pre-selected payment method available based on the field on orders (might require a custom rule condition?). Use Rules to calculate your fee based on that field selection and not on the actual payment gateway selected. Use Commerce Checkout Ajax to re-load panes as needed.