получить значение из ответа токена доступа Oauth и использовать его в другом php файле - PullRequest
0 голосов
/ 04 августа 2020

Я настроил соединение API для получения данных о продукте, которое работает нормально, но я борюсь с токеном acces, срок действия которого истекает каждые 1800 секунд c:

Итак, у меня есть refre sh. php файл для запроса нового токена доступа с использованием refre sh токен + секрет клиента и идентификатор

<?php
    
    $url = 'https://cloud.lightspeedapp.com/oauth/access_token.php';
    
    $postfields = array(
      'refresh_token' => 'xxxxxxxxxxx',
      'client_secret' => 'xxxxxxxxxxxxx',
      'client_id' => 'xxxxxxxxxxxxx',
      'grant_type' => 'refresh_token'
    );
    
    $curl = curl_init();
    
    curl_setopt($curl,CURLOPT_URL, $url);
    curl_setopt($curl,CURLOPT_POST, sizeof($postfields));
    curl_setopt($curl,CURLOPT_POSTFIELDS, $postfields);
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
        echo 'cURL Error #:' . $err;
    } else {
        echo $response;
    }
    ?>

Это работает и дает мне новый токен доступа, когда предыдущий срок действия истек, вот результат:

{"access_token": "xxxxxxxxx", "expires_in": 584, "token_type": "bearer", "scope": "employee: all", "refresh_token": "xxxxxxxxxxxxxxxx"} 1

У меня есть еще один php файл test. php для получения данных из api, который также работает, но я вручную поместил токен доступа в file

<?php
$authorization = "Authorization: Bearer MANUALLYINPUTTEDHEREXXXXXXXXX";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml' , $authorization ));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,'https://api.lightspeedapp.com/API/Account/XXXXX/Item?load_relations=all');
$content = curl_exec($ch);
echo $content;
?>

Мой вопрос: как я могу повторить значение acces_token из ответа на refre sh. php в тесте. php?

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Единственный способ - сохранить ваш токен доступа и получить его на любой странице по запросу, или вы можете поместить информацию о своем токене доступа при создании сеанса и вызвать его на любой странице.

0 голосов
/ 04 августа 2020

Вы можете использовать переменные сеанса для получения токена доступа с одной страницы на другую. Кроме того, вы можете изменить test. php с помощью следующего кода и удалить файл refre sh. php. Здесь я создал функцию с именем generate_token, которая будет возвращать значение access_token. Вы можете использовать это значение в приведенном ниже коде.

<?php
    
    function generate_token(){
    
    $url = 'https://cloud.lightspeedapp.com/oauth/access_token.php';
    
    $postfields = array(
      'refresh_token' => 'xxxxxxxxxxx',
      'client_secret' => 'xxxxxxxxxxxxx',
      'client_id' => 'xxxxxxxxxxxxx',
      'grant_type' => 'refresh_token'
    );
    
    $curl = curl_init();
    
    curl_setopt($curl,CURLOPT_URL, $url);
    curl_setopt($curl,CURLOPT_POST, sizeof($postfields));
    curl_setopt($curl,CURLOPT_POSTFIELDS, $postfields);
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    /*if ($err) {
        echo 'cURL Error #:' . $err;
    } else {
        echo $response;
    }*/

    return $response['access_token'];
    }
    

    $access_token = generate_token();
    $authorization = "Authorization: Bearer $access_token";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml' , $authorization ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,'https://api.lightspeedapp.com/API/Account/XXXXX/Item?load_relations=all');
    $content = curl_exec($ch);
    echo $content;

?>
...