skip to Main Content

I am working on Razorpay integration and after succesful payment when I try to save the details to the database I get an error. I am sending the details through AJAX and in controller when I try to use foreach and look in console I always get the error invalid argument supplied for foreach statement.

this is the script after successful transaction

<script>

    function demoSuccessHandler(transaction) {
        // You can write success code here. If you want to store some data in database.
        $("#paymentDetail").removeAttr('style');
        $('#paymentID').text(transaction.razorpay_payment_id);
        var paymentDate = new Date();
        $('#paymentDate').text(
                padStart(paymentDate.getDate()) + '.' + padStart(paymentDate.getMonth() + 1) + '.' + paymentDate.getFullYear() + ' ' + padStart(paymentDate.getHours()) + ':' + padStart(paymentDate.getMinutes())
                );

        $.ajax({
            method: 'post',
            url: "{!!route('dopayment')!!}",
            dataType:"json",
            data: {
                "_token": "{{ csrf_token() }}",
                "product": "{{ json_encode($product)}}",
                "Company": "{{ $company}}",
                "Address": "{{$address}}",
                "Contact": "{{$contact}}",
                "razorpay_payment_id": transaction.razorpay_payment_id
            },
            complete: function (r) {
                console.log('complete');
                console.log(r);
            }
        })
    }
</script>
<script>
    var options = {
        key: "{{ env('RAZORPAY_KEY') }}",
        amount: '{{ $subtotal}}',
        name: 'AMCOR RAZORPAY',
        description: 'AMCOR INTERNATIONAL',
        image: 'https://i.imgur.com/n5tjHFD.png',
        handler: demoSuccessHandler
    }
</script>

the controller function is

 public function dopayment(Request $request) {

            $input = $request->all();

            $product = $request->product;


            foreach ($product as $single) {
                # code...

                print_r($single->name);
            }

            print_r($product);
            exit;
        }

3

Answers


  1. You may decode product string before loop through it

    //...
    $product  = json_decode($request->product, true);
    //...
    
    Login or Signup to reply.
  2. Please Json Decode before foreach loop

     public function dopayment(Request $request) {
    
                $input = $request->all();
    
                $product = json_decode($request->product);
    
    
                foreach ($product as $single) {
                    # code...
    
                    print_r($single->name);
                }
    
               print_r($product);
                exit;
            }
    
    Login or Signup to reply.
  3. The error occurs because $product returns a single value instead of an array; a check will work in this case.

    if (is_array($product ) || is_object($product ))
    {
        foreach($product as $arrayItems){
          // Perform x.
        }
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search