Intereting Posts

Laravel 4 отправляет запрос от контроллера на внешний URL с данными

Я ищу способ сделать запрос на отправку с контроллера на внешний URL. Вывод данных – это php-массив. URL-адрес, который нужно получить, является API электронной коммерции во внешнем URL-адресе. Сообщение должно выполняться по методу контроллера. URL-адрес должен отвечать строкой 'success', 'error', 'failure' или 'trylater'. Я пробовал следующее без успеха:

return Redirect::to("https://backoffice.host.iveri.com/Lite/Transactions/New/Authorise.aspx", compact($array)); 

Я тоже попробовал завиток:

  $url = 'https://backoffice.host.iveri.com/Lite/Transactions/New/Authorise.aspx'; //url-ify the data for the POST $fields_string =''; foreach($array as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } rtrim($fields_string,'& '); //open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST, count($array)); curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //execute post $result = curl_exec($ch); //close connection curl_close($ch); 

Часть отправляемого массива – это обратные вызовы, которые API использует для ответа:

 'Lite_Website_Successful_url' => 'https://mydomain.com/order/'.$order_id, 'Lite_Website_Fail_url' => 'https://mydomain.com/checkout/fail', 'Lite_Website_TryLater_url' => 'https://mydomain.com/checkout/trylater', 'Lite_Website_Error_url' => 'https://mydomain.com/checkout/error' 

Пожалуйста, дайте мне знать, как правильно выполнить POST-запрос с данными, переносимыми с ним на внешний URL-адрес. Сообщение ajax от контроллера тоже помогло бы, но я попытался без успеха. Но я бы предпочел, чтобы ответ на laravel php больше. Спасибо.

Позвольте мне прояснить некоторые вещи и попытаться указать вам в правильном направлении.

Во-первых, то, что вы пытаетесь сделать, звучит как «создание запроса API из вашего веб-приложения». Разница в этой формулировке в том, как я заявлял это против вашего, заключается в том, что она более общая.

  1. Вы можете сделать запрос API в любом месте приложения, не обязательно в своем контроллере (не бойтесь делать дополнительные классы / модели для таких вещей, как вызовы API!)
  2. Мне интересно, почему это «должно быть» сделано в вашем контроллере? Каков ваш прецедент?
  3. AJAX не существует на стороне сервера (в PHP). Это просто специфическая для javascript «технология», которая описывает javascript, который делает запрос на URL-адрес на стороне клиента.

Наконец, что вы пытаетесь сделать? Вам нужен пользователь для перенаправления? Или вам нужно сделать вызов API и проанализировать результат в своем приложении?

Запрос cURL, который вы пытались, должен работать для создания запроса API. Это один из основных способов сделать запрос API в PHP-коде. Однако он не позволит пользователю в интерфейсе видеть, что запрос выполняется и обрабатывается. С cURL (и любым запросом API) обработка происходит за кулисами вашего PHP (что ваши пользователи не видят).

Мы можем использовать пакет Guzzle в Laravel, это HTTP-клиент PHP для отправки HTTP-запросов.

Вы можете установить Guzzle через композитор

 composer require guzzlehttp/guzzle:~6.0 

Или вы можете указать Guzzle как зависимость от существующего в вашем проекте композитора.json

 { "require": { "guzzlehttp/guzzle": "~6.0" } } 

Пример кода запроса POST в laravel, используя Guzzle, показан ниже,

 use GuzzleHttp\Client; class yourController extends Controller { public function saveApiData() { $client = new Client(); $res = $client->request('POST', 'https://url_to_the_api', [ 'form_params' => [ 'client_id' => 'test_id', 'secret' => 'test_secret', ] ]); $result= $res->getBody(); dd($result); 

}

Используйте CURL так, как вы пытались, или посмотрите этот поток для краткого ответа на это с помощью http-клиента Guzzle. Кажется, что Guzzle является предпочтительным клиентом для использования с Laravel …

Вызовите внешнюю функцию API от контроллера, LARAVEL 4