Патент EPO php curl oauth, мне не удается вывести данные - OPS - PullRequest
0 голосов
/ 18 января 2020

https://www.epo.org/

Я пытаюсь получить данные из системы OPS, используя PHP функции cURL http://php.net/manual/en/ref.curl.php. Это позволяет использовать аутентификацию oauth2.

Мне удалось создать токен и сохранить его данные локально, используя следующие функции:




<?php
function read_token ($tokenname) {

    $tokenfile="./tokens/$tokenname.dat";
    $error='';
    if (file_exists($tokenfile)) {
        $token=unserialize(file_get_contents($tokenfile));
// convert token issued time from windows (milliseconds) format to unix (seconds) format
        $tokentime=substr($token['issued_at'],0,-3);
        $tokenduration=$tokentime + $token['expires_in'] - 120;
        if ($tokenduration < time()) {
            $error.="token '$tokenname' expired.<br>\n";
        } else {
            $token['error']=$error;
        }
    } else {
        $error.="tokenfile '$tokenname' not found.
\n"; } if ($error) {$token=create_token($tokenname);} return($token); } function create_token ($tokenname) { // set variables $tokenfile="./tokens/$tokenname.dat"; $error=''; switch ($tokenname) { case 'OPSincidental': $ops_key='--mykey--'; $ops_secret='--mysecret--'; break; default: $ops_key=''; $ops_secret=''; break; } $tokenUrl='https://ops.epo.org/3.1/auth/accesstoken'; $tokenHeaders=array( 'Authorization: Basic '.base64_encode($ops_key.':'.$ops_secret), 'Content-Type: application/x-www-form-urlencoded' ); $tokenPostFields='grant_type=client_credentials'; $curlOpts=array( CURLOPT_URL => $tokenUrl, CURLOPT_HTTPHEADER => $tokenHeaders, CURLOPT_POSTFIELDS => $tokenPostFields, CURLOPT_POST => 1, CURLOPT_RETURNTRANSFER => 1 ); // obtain token $token_request= curl_init(); curl_setopt_array($token_request, $curlOpts); if (!$ops_token_response=curl_exec($token_request)) {$error.=curl_error($token_request)."
\n";} curl_close($token_request); // process token $ops_token_split=explode(',', trim($ops_token_response,'{}')); foreach ($ops_token_split as $tokenval) { $tokenpair=explode(' : ', trim($tokenval)); $token[trim($tokenpair[0],'"')]=trim($tokenpair[1],'"'); } // write token data to file file_put_contents($tokenfile, serialize($token)); // add error information to token array and return result $token['error']=$error; return($token); } $token=read_token('OPSincidental'); if (!$token['error']) { echo "Token:
\n"; print_r($token); echo "
"; // подготовить к отправке запроса данных $ error = '' ; $ requestUrl = 'http://ops.epo.org/3.1/rest-services/published-data/publication/epodoc/EP1000000'; $ requestHeaders = array ('Authorization: Bearer'. $ token ['access_token'], 'Host: ops.epo.org', 'X-Target-URI: http://ops.epo.org' , 'Accept: application / xml', 'Connection: Keep-Alive'); $ curlOpts = array (CURLOPT_URL => $ requestUrl, CURLOPT_HTTPHEADER => $ requestHeaders, // CURLOPT_SSL_VERIFYPEER => FALSE, // CURLVERIFH_SS , CURLOPT_RETURNTRANSFER => 1, CURLOPT_HEADER => 1); // отправим запрос и соберем данные {$ error. = curl_error ($ ops_request). "
\ n";} echo "параметры curl:
\ n"; echo "
";print_r($requestHeaders);echo "
"; curl_close ($ ops_request); if ($ error) {echo "Ошибка:
\ n $ error";} else {echo "Результат:
\ n" .htmlspecialchars ($ ops_response);}} else {ec ho $ token ['error']; }?>

Код правильно читает токен как сохраненный. Однако результат, который я получаю - это просто заголовок ответа, а не данные ответа. Ответ заголовка выглядит следующим образом:

Result:
HTTP/1.1 400 Bad Request Date: Sat, 18 Jan 2020 08:56:44 GMT Content-Type: application/xml Content-Length: 129 Connection: keep-alive WWW-Authenticate: Bearer realm="null",error="invalid_token",error_description="oauth.v2.InvalidAccessToken: Invalid access token" Access-Control-Allow-Methods: POST Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Authorization <error><code>400</code><message>invalid_access_token</message><description>Access token is invalid</description> </error> string(514) "HTTP/1.1 400 Bad Request Date: Sat, 18 Jan 2020 08:56:44 GMT Content-Type: application/xml Content-Length: 129 Connection: keep-alive WWW-Authenticate: Bearer realm="null",error="invalid_token",error_description="oauth.v2.InvalidAccessToken: Invalid access token" Access-Control-Allow-Methods: POST Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Authorization 400invalid_access_tokenAccess token is invalid "
...