#php #laravel #api #curl #request
#php #laravel #API #curl #запрос
Вопрос:
Я пытаюсь сделать запрос php curl к моему laravel api
Вот функция curl
function CallAPI($method, $url, $data = false)
{
$curl = curl_init();
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
curl_setopt($curl, CURLOPT_HEADER, array('Accept:application/json', 'X-Requested-With:XMLHttpRequest' )
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
print curl_error($curl);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
Вот где я это называю :
require_once ADJEMINPAY_PLUGIN_DIR.'includes/class-adjeminpay-functions.php';
$url = "https://api.adjeminpay.net/v1/auth/getToken/";
$postData = array(
'firstName' => 'Lady',
'lastName' => 'Gaga',
'submit' => 'ok'
);
$result = CallAPI("POST", $url, $postData);
var_dump($result);
Вот результат :
string(454) "HTTP/2 301 date: Fri, 04 Dec 2020 12:12:03 GMT server: Apache location: https://api.adjeminpay.net/public/v1/auth/getToken content-length: 258 content-type: text/html; charset=iso-8859-1
Moved Permanently
The document has moved here.
"
Похоже, laravel не понимает, что это запрос api, и продолжает изменять URL на https://api.adjeminpay.net/public / v1/auth/getToken/ ; он также пытается перенаправить на https://api.adjeminpay.net /
Помогите kudasai TT
Комментарии:
1. Вы установили корневой каталог вашего веб
public
-сервера в качестве каталога? Вы установили правильноеAPP_URL
значение в своем.env
? (Кстати,public
папка также отображается при использовании «Se connecter» вверху)2. Если вы создаете API в Laravel, первым делом он должен быть внутри
routes/api.php
вместоroutes/web.php
. Это добавило/api
бы к маршруту, но его следует настраивать.3. @nice_dev Мои маршруты api находятся в routes/api.php Я просто изменил его на /v1 вместо / api, потому что мы планируем в ближайшее время разработать v2
4. @brombeer да и да, .env:
APP_URL=https://api.adjeminpay.net/
когда вы нажимаете «Se connecter», он перенаправляет на другой поддомен, и да, в URL-адресе есть ‘/ public’, но до сих пор это не вызывало никаких ошибок в других API5. Это прекрасно работает, когда я выполняю одни и те же запросы API с помощью ajax, даже с curl в командной строке это работает просто отлично.
Ответ №1:
Ооочень, оказывается, синтаксис / версия curl, которую я использовал, была неисправной / неполной.
Перешел к PostMan и выполнил тот же запрос, а затем скопировал код php -curl, который выглядит следующим образом :
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'yourUrl',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"apikey": "qsmdlfjqs",
"application_id": "qsdlfqsmlj",
"grant-type": "qmdsfqsdf"
}',
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Content-Type: application/json',
': ',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
И теперь он работает нормально.
Arigathanks (^^)/