Skip to content
Advertisement

How to add payment fee to cart in Prestashop?

I want to add payment fee to cart with a product created for payment fees. But when i add to cart the product for fee then i use $cart->getOrderTotal(), it doesn’t show the real price with fee. It shows the order total as product price without fee.

I use SpecificPrice class for this action. And i think prestashop orders page on back office, firstly reads products with specific prices. However, it does not show the payment price, but shows it together with the price of the product I added.

Maybe you didn’t understand it like that, but I explained it better in the comments below. Please help me. I’ve been struggling for 2 days. 🙁

$specific_price = new SpecificPrice();
        $specific_price->id_product = 50; // choosen product id
        $specific_price->id_customer = (int) $cart->id_customer;
        $specific_price->id_product_attribute = 0;
        $specific_price->id_cart = (int)$cart->id;
        $specific_price->id_shop = (int) $cart->id_shop;
        $specific_price->id_currency = (int) $cart->id_currency;
        $specific_price->id_country = Context::getContext()->country->id;
        $specific_price->id_group = 0;
        $specific_price->from_quantity = 1;
        $specific_price->price = $installment_fee; //installment fee is here. (example: 1.13)
        $specific_price->reduction_type = 'amount';
        $specific_price->reduction_tax = 1;
        $specific_price->reduction = 0;
        $specific_price->from = date("Y-m-d H:i:s");
        $dateUntil = new DateTime(); $dateUntil->modify("+2 days");
        $specific_price->to = $dateUntil->format('Y-m-d H:i:s'); // or set date x days from now
        try{
            $specific_price->add(1,1);
        } catch (Exception $exception)
        {
            echo $exception->getMessage(); die;
        }

        //cart product price = 30
        //installment fee product = 10 (i want to edit it with installment fee (ex: 1.13))
        $cart->updateQty(1,50); 
        //the real product is here. Price: 10, but i want to use it with specific price created above.So product price + specific price.
        //but it shows product price(30) + product price(10)
        //but i want product price(30) + product price(1.13) 
        
        echo '<pre>';
        print_r($cart->getOrderTotal()); //it shows 40 but i want 31.13
        exit;

Advertisement

Answer

I was solved the problem. The problem was clearing the card cache after adding the product to cart.

If you encounter this problem, add the following code before the validateOrder function.

Cart::resetStaticCache();
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement