Запрос POST на внешний API привел к «500 внутренней ошибке сервера»

#laravel #api

Вопрос:

поэтому у меня есть задача, которую нужно выполнить, отправив сообщение во внешний API с помощью {{url}}/ссылка-ec/отправить (это, например)

и я сделал это с помощью ввода запроса формы, и в итоге получил 500 Internal Server Error

я использую контроллер laravel для отправки этой формы

это мой контроллер

 $dataSubmit = [  "customerName" =gt; $request-gt;input('customerName'),  "mobilePhone" =gt; $request-gt;input('mobilePhone'),  "nik" =gt; $request-gt;input('nik'),  "birthPlace" =gt; $request-gt;input('birthPlace'),  "birthDate" =gt; $request-gt;input('birthDate') ];    $clientSubmit = new GuzzleHttpClient(['headers' =gt;   'Accept' =gt; 'application/json',  'Content-Type' =gt; 'application/json',  'Authorization' =gt; 'Bearer token']);  $responseSubmit = $clientSubmit-gt;request(  'POST',  'url/link-ec/submit',  ['json' =gt; $dataSubmit]   );  $responseSubmit = json_decode($responseSubmit-gt;getBody(), true);   return $responseSubmit;  

на случай, если вам, ребята, понадобится маршрут и форма, чтобы узнать о проблеме:

 Route::get('/post-link', 'IntegrationController@submit'); lt;form class="form form-fifastra financing-form" method="GET" id="form-apply"  action="{{ url('post-fifada') }}"gt;  @csrf lt;/formgt;  

в этом и заключается ошибка

введите описание изображения здесь

Комментарии:

1. $responseSubmit используется form_params вместо json

Ответ №1:

Проблема в том, что API не может десериализовать тело запроса. Попробуйте кодировать тело в формате json перед отправкой, потому что API ожидает, что в теле будет json.

 $responseSubmit = $clientSubmit-gt;request(  'POST',  'url/link-ec/submit',  ['json' =gt; json_encode($dataSubmit)]   );  

Комментарии:

1. я пробовал использовать ваш код, но он возвращает следующее: «json_decode() ожидает, что параметр 1 будет строкой, заданным массивом».

2. Посмотрите @ErandaDava, теперь это другая ошибка для другой ошибки, мы используем json_encode в моем фрагменте кода, и вы получили ошибку при использовании json_decode в строке: $responseSubmit = json_decode($responseSubmit-gt;getBody(), true);

3. окай, я только что это понял. спасибо за вашу проницательность, я исправлю эту ошибку

4. возможно, вы можете использовать: $responseSubmit = $responseSubmit-gt;getBody(); (без декодирования json), так как тело вашего ответа уже является массивом