Search code examples
laravellumenguzzle

Fetch form_params data from Guzzle post request in lumen api


In my laravel 5.7 app, I have a controller with the following method that sends a post request using GuzzleHttp\Client to my lumen api.

public function insert(Request $request)
    { 
        $domain = Config::get('url.gcr_api'); // gcr_api is defined in app/config/url.php
        $url = $domain . "/api/v1/campaign/insert"; 

        $campaign_name =  $request->input('campaign_name');
        $campaign_provider =  $request->input('campaign_provider');

        $client = new Client;
        $response = $client->request('POST', $url , [
                                'headers' => [
                                    'X-XSRF-TOKEN' => csrf_token(),
                                ],
                                'form_params' => [
                                    'name' => $campaign_name, 
                                    'bank_id' => $campaign_provider,
                                ]
                            ]
                    );

        $data = json_decode($response->getBody(), true);
        return $data;

    }
}

Here is the code for the lumen api that is called by the above method.

public function insert(Request $request) {
        try {
            $campaign_name =  $request->input('campaign_name');
            $campaign_provider =  $request->input('campaign_provider');

            $data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
            DB::table('campaign')->insert($data); 

            $response = array(
                'status' => 'success',
                'message' => 'Campaign created successfully',
            );        
            return response()->json($response);
        }
        catch(Exception $e) {
            // When query fails. 
            $response = array(
                'status' => 'failed',
                'message' => 'Failed to create campaign',
            );

            return response()->json($response);
        }
    }

I am getting this error everytime the insert method of my laravel app controller is called:

GuzzleHttp \ Exception \ ServerException (500) Server error: POST http://localhost:8000/api/v1/campaign/insert resulted in a 500 Internal Server Error response:

I think the error has something to do with my lumen api not able to fetch form_params data, so I commented out this block of code in my lumen api code and error disappears:

/*$campaign_name =  $request->input('campaign_name');
  $campaign_provider =  $request->input('campaign_provider');

  $data = array('name' => $campaign_name, 'bank_id' => $campaign_provider);
  DB::table('campaign')->insert($data); */

But I need to fetch the form_params data in my lumen api, how do I do that?


Solution

  • Your assumption is partially correct, it can access the form_params, but the form_params you try to get differ from the actual parameters:

    In order to pass the paramters you use the following array:

    'form_params' => [
        'name' => $campaign_name, 
        'bank_id' => $campaign_provider,
    ]
    

    This array will set the value to $campaign_name with the key 'name', and $campaign_provider to bank_id. Nothing wrong with this code so far.

    However in your API you do the following:

    $campaign_name =  $request->input('campaign_name');
    $campaign_provider =  $request->input('campaign_provider');
    

    However no key campaign_name or campaign_provider is present, since these have been changed to name and bank_id. So if you change this to the following it should work:

    $campaign_name =  $request->input('name');
    $campaign_provider =  $request->input('bank_id');