2

I have a created a product with price: 0, Now i would like to add a product with custom price from my custom controller. since i am submitting a custom form in the customer dashboard to my controller. i have placed code as shown below. please suggest me how i can achieve this.

Screenshot:

enter image description here

<?php
    namespace CompanyName\ModuleName\Controller\Customer;
    use Magento\Framework\Controller\ResultFactory;
    use Magento\Framework\App\Action\Action;
    use Magento\Framework\App\Action\Context;
    use Magento\Framework\View\Result\PageFactory;

class Paytradecommission extends \Magento\Customer\Controller\AbstractAccount
{

    protected $resultPageFactory;
    protected $formKey;
    protected $request;

    public function __construct(
    Context $context,
    \Magento\Framework\Data\Form\FormKey $formKey,
    PageFactory $resultPageFactory,
    array $data = []) 
    { 
        $this->formKey = $formKey;
        $this->resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }

    /**
     *
     * @return \Magento\Framework\View\Result\Page
     */
    public function execute()
    {

        $selectedOrdersList=$this->getRequest()->getParam('orderinc');

        $resultPage = $this->resultPageFactory->create();
            $params = array(
                'form_key' => $this->formKey->getFormKey(),
                'product' =>2047,//product Id
                'qty'   =>1,//quantity of product
                'price' =>100 //product price
            );

            $this->_redirect("checkout/cart/add/form_key/", $params);
        /** @var \Magento\Framework\View\Result\Page $resultPage */
        return $resultPage;

    }
}

Conditions:

1. I am able to add a product to cart but it shows '0' but unable to add custom price.

2. After add a product it should redirect to checkout page. 
16
  • 1
    didi you get the solution
    – amith lal
    Commented Sep 21, 2017 at 11:34
  • thanks for u r comment @amith how r u? i got the solution for the above question. Commented Sep 21, 2017 at 11:59
  • I'm Good! Thats great .I also having a same kind of issue i will post the question and share with you.
    – amith lal
    Commented Sep 21, 2017 at 12:06
  • 1
    hi @manini please check this link github.com/NagarajuKasa/Nagmagento2/blob/master/… Commented Nov 23, 2017 at 10:25
  • 1
    sure actually while adding product via controller i was facing an issue with the adding custom price to cart. hence i kept 'price' in session variable and passed to observer checkout_cart_product_add_after Commented Nov 23, 2017 at 10:35

3 Answers 3

1

Please find the below solution. It will works.

     public function __construct(
         \Magento\Framework\App\Action\Context $context,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         \Magento\Catalog\Model\Product $product,
         \Magento\Framework\Data\Form\FormKey $formKey,
         \Magento\Checkout\Model\Cart $cart
     ) {
         $this->resultPageFactory = $resultPageFactory;
         $this->cart = $cart;
         $this->product = $product;
         $this->formKey = $formKey;
         parent::__construct($context);
     }
     public function execute()
     {
         $data = $this->getRequest()->getParams();
        $currentQty = $data['qty'];
        $currentProId = $data['product'];
        $currCount = $data['id'];
        $CurrPrice = $data['price'];
             $params = array();
             $params['qty'] = $currentQty;//product quantity
             $params['price'] = $CurrPrice;//product price
              $pId = $currentProId;//productId
             $_product = $this->product->load($pId);
             if ($_product) {
                 $this->cart->addProduct($_product, $params);
                 $this->cart->save();
             }
2
  • its not working sathisraj it showing blank page Commented Jun 22, 2017 at 13:33
  • It is not working @sathishraj
    – Venkatesh
    Commented Apr 6, 2018 at 12:11
0

Can you try the following code?. May be solve your problem.

$item->setCustomPrice(20);
$item->setOriginalCustomPrice(20);
$item->getProduct()->setIsSuperMode(true);
$item->setQty(0);
$item->save();
3
  • how can i get $item ? Commented Jun 22, 2017 at 12:15
  • you can load product using product id
    – Jjo
    Commented Jun 22, 2017 at 12:21
  • @Jjo This is code for the observer. Is there any way to add the custom price for a product through a controller?
    – manini
    Commented Nov 23, 2017 at 9:46
0

Working solution and really easy if you think about it:

$params = array(
  'form_key' => $this->_formKey->getFormKey(),
  'product' => $item->getProductId(),
  'qty'   => $item->getQtyOrdered()
);

$product = $this->_product->load($productId); 
$product->setPrice($customPrice); // without save this does the trick
$this->cart->addProduct($product, $params);
$this->cart->save();

The missing pieces feel free to fill them in.

3
  • this doesn't work i tried using price and CustomPrice Commented Nov 19, 2019 at 12:30
  • Not a working solution. Commented Dec 15, 2021 at 12:11
  • Not the right solution Commented Dec 12, 2023 at 9:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.