laravel 7 продолжает добавлять ‘/ public/’ к моим маршрутам api

#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’, но до сих пор это не вызывало никаких ошибок в других API

5. Это прекрасно работает, когда я выполняю одни и те же запросы 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 (^^)/

Кстати, как сгенерировать PHP -curl-код из POSTMAN.