Я ищу способ сделать запрос на отправку с контроллера на внешний 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 из вашего веб-приложения». Разница в этой формулировке в том, как я заявлял это против вашего, заключается в том, что она более общая.
Наконец, что вы пытаетесь сделать? Вам нужен пользователь для перенаправления? Или вам нужно сделать вызов 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