Получить данные form_params из почтового запроса Guzzle в lumen api - PullRequest
0 голосов
/ 11 ноября 2018

В моем приложении laravel 5.7 у меня есть контроллер с помощью следующего метода, который отправляет почтовый запрос, используя GuzzleHttp \ Client, в мой 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;

    }
}

Вот код для lumen api, который вызывается вышеуказанным методом.

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);
        }
    }

Я получаю эту ошибку каждый раз, когда вызывается метод вставки моего контроллера приложения laravel:

GuzzleHttp \ Exception \ ServerException (500) Ошибка сервера: POST http://localhost:8000/api/v1/campaign/insert привело к ответу 500 Internal Server Error:

Я думаю, что ошибка связана с тем, что мой lumen api не может получить данные form_params, поэтому я закомментировал этот блок кода в моем lumen api-коде, и ошибка исчезла:

/*$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); */

Но мне нужно получить данные form_params в моем lumen api, как мне это сделать?

1 Ответ

0 голосов
/ 12 ноября 2018

Ваше предположение частично верно, оно может получить доступ к form_params, но form_params, которые вы пытаетесь получить, отличаются от фактических параметров:

Для передачи параметров вы используете следующий массив:

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

Этот массив будет устанавливать значение $campaign_name с ключом 'name', а $campaign_provider - bank_id. Пока ничего плохого в этом коде.

Однако в вашем API вы делаете следующее:

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

Однако никаких ключей campaign_name или campaign_provider нет, поскольку они были изменены на name и bank_id. Так что если вы измените это на следующее, оно должно работать:

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