#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), так как тело вашего ответа уже является массивом