Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

andrewJay's avatar

Too few arguments to function ... 1 passed and exactly 2 expected.

Hey guys I get this error :

Too few arguments to function App\Http\Controllers\PagesController::payment_process(), 1 passed and exactly 2 expected

I don't know what's wrong with $productPrice parameter from payment_process() method. I can see the payment in stripe dashboard without any errors but on my page after my form was submitted it appears the error that I've mentioned above. Any help please?

    public function payment(Request $request,$id){
        $products = ProductsModel::findorfail($id);
        $productPrice = $products->price;
     
      $this->payment_process($request,$productPrice);

        return view('pages/payment')->with(['products' => $products]);
    }


    
    public function payment_process(Request $request,$productPrice){
          
        

         \Stripe\Stripe::setApiKey('...');
         try {
             Charge::create ( array (
                     "amount" => $productPrice * 100,
                     "currency" => "usd",
                     "source" => 'tok_visa', // obtained with Stripe.js
                     "description" => "Test payment." 
             ) );
              
                   $this->validate($request, [
             'firstName' => 'required',
             'lastName' => 'required',
             'country' => 'required',
             'state' => 'required',
             'zip' => 'required',
             'address'=> 'required'        
         ]);
         $product = new OrderDetailsModel;
         $product->firstName = request('firstName');
         $product->lastName = request('lastName');
         $product->email = request('email');
         $product->country = request('country');
         $product->address = request('address');
         $product->address2 = request('address2');
         $product->state = request('state');
         $product->zip = request('zip');
         $product->extrainformation = 'null';
         $product->save();
       
             Session::flash ( 'success-message', 'Payment done successfully !' );
             return Redirect::back ();
         } 
         
         catch ( \Exception $e ) {
             Session::flash ( 'fail-message', "Error! Please Try again." );
             return Redirect::back ();
         }
     
         return redirect('/')->with('success', 'Order Created');
 
     }

My web.php file :

Auth::routes();

Route::get('/', 'PagesController@index');
Route::get('/about', function(){
    return '<h1>This is about page</h1>';
});

Route::get('/products', 'PagesController@products');
Route::post('/add_product', 'PagesController@add_product');
Route::get('/payment/{id}', 'PagesController@payment');
Route::post('/payment_process', 'PagesController@payment_process');

Route::get('/dashboard', 'DashboardController@index');


Route::get('/edit/{id}', 'PagesController@edit_product');


Route::get('/delete/{id}', 'PagesController@delete');


Route::post('/{id}','PagesController@update_product');


0 likes
2 replies
Sinnbeck's avatar

You are not passing a price as a parameter

Either

Route::post('/payment_process/{productPrice}', 'PagesController@payment_process');

Or change your method

public function payment_process(Request $request,$productPrice = null){
          
        $productPrice = $productPrice ?? $request->productPrice;

         \Stripe\Stripe::setApiKey('...');
andrewJay's avatar

I've tried both methods of your. They are working but if I submit the form I see in Stripe dashboard that I get 2 payments at the same time with the same price . Something is wrong..

Please or to participate in this conversation.