###やりたいこと
Yahoo属性取得APIを使って、ユーザー情報を取得したい。
取得したい情報は ユーザー識別子のみです。
###エラー内容
アクセスtokenは取得できるようになりましたが、
ユーザー情報が取得できません。
わかる方よろしくお願いします。
###トークン表示
{"access_token":"~~~","refresh_token":".~~~"}
###エラー表示
Warning: curl_setopt() expects parameter 2 to be long, string given in callback.php on line 83
{ "Error" : { "Message" : "Please provide valid credentials. Bearer realm="yahooapis.jp", error="invalid_request", error_description="token_missing"" } }
###コード
php
1$ch = curl_init("https://userinfo.yahooapis.jp/yconnect/v1/attribute?schema=openid"); 2 curl_setopt($ch, CURLOPT_GET, true); 3 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 4 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 5 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 6 'Content-Type: application/json; charser=UTF-8', 7 'Authorization: Bearer ' . $Atoken 8 )); 9 $result = curl_exec($ch); 10echo $result; 11 curl_close($ch); 12
全部のコードを記載します。
php
1<?php 2/* 3 * 定数読み込み 4 */ 5require_once('yahoo_constant.php'); 6 7/* 8 * アクセストークンの取得 9 * ここでは HTTP_Request2 を使用してみます 10 */ 11require_once('Net/URL2.php'); 12require_once('HTTP/Request2.php'); 13 14$code = $_REQUEST['code']; 15 16$http_options = [ 17 'protocol_version' => '1.1', 18 'connect_timeout' => '300', 19 'timeout' => '300', 20 'follow_redirects' => true, 21 'max_redirects' => 3, 22 'ssl_verify_peer' => false 23]; 24$req = new \HTTP_Request2(\TOKEN_ENDPOINT, \HTTP_Request2::METHOD_POST, $http_options); 25 26 27$req->setHeader('Connection', 'keep-alive'); 28$req->setHeader('Content-Type', 'application/x-www-form-urlencoded'); 29$req->setHeader('Accept-Charset', 'UTF-8'); 30 31 32$request_parameter = [ 33 'code' => $_REQUEST['code'], 34 'client_id' => \CLIENT_ID, 35 'client_secret' => \CLIENT_SECRET, 36 'redirect_uri' => \REDIRECT_URL, 37 'grant_type' => 'authorization_code' 38]; 39foreach ($request_parameter as $key => $value) { 40 $req->addPostParameter($key, $value);} 41 42 43try{ 44 $res = $req->send(); 45 if ($res->getStatus() != 200) { 46 error_log('doHttpRequest(): Request status is not 200: '.$res->getStatus()); 47 return false; 48 } 49 50 51 // get response 52 $responses = json_decode($res->getBody()); 53$test=$res->getBody(); 54echo $test; 55echo $responses->access_token; 56 57 58 list($client_id_signature, $jwt_encoded) = explode(".", $responses->id_token); 59 $jwt = json_decode(base64_decode($jwt_encoded)); 60 $sub = $jwt->sub; 61 $email = $jwt->email; 62echo '<br><br><br>'; 63$Atoken= $res->access_token; 64 65 66} catch (\HTTP_Request2_Exception $e) { 67 error_log('doHttpRequest(): HTTP_Request2_Exception: '.$this->getMessageByHttpRequest2ExceptionCode($e->getCode())); 68 exit; 69} 70 71$ch = curl_init("https://userinfo.yahooapis.jp/yconnect/v1/attribute?schema=openid"); 72 curl_setopt($ch, CURLOPT_GET, true); 73 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 74 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 75 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 76 'Content-Type: application/json; charser=UTF-8', 77 'Authorization: Bearer ' . $Atoken 78 )); 79 $result = curl_exec($ch); 80echo $result; 81 curl_close($ch); 82 83 84?>
回答1件
あなたの回答
tips
プレビュー