質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • PHP

    19153questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • API

    1420questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • cURL

    142questions

    cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Yahoo属性取得APIを使って、ユーザー情報を取得したい。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 346

teityann1225

score 17

やりたいこと

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\"" } }

コード

$ch = curl_init("https://userinfo.yahooapis.jp/yconnect/v1/attribute?schema=openid");
    curl_setopt($ch, CURLOPT_GET, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charser=UTF-8',
        'Authorization: Bearer ' . $Atoken
    ));
    $result = curl_exec($ch);
echo $result;
    curl_close($ch);


全部のコードを記載します。

<?php
/*
 * 定数読み込み
 */
require_once('yahoo_constant.php');

/*
 * アクセストークンの取得
 * ここでは HTTP_Request2 を使用してみます
 */
require_once('Net/URL2.php');
require_once('HTTP/Request2.php');

$code = $_REQUEST['code'];

$http_options = [
    'protocol_version' => '1.1',
    'connect_timeout' => '300',
    'timeout' => '300',
    'follow_redirects' => true,
    'max_redirects' => 3,
    'ssl_verify_peer' => false
];
$req = new \HTTP_Request2(\TOKEN_ENDPOINT, \HTTP_Request2::METHOD_POST, $http_options);


$req->setHeader('Connection', 'keep-alive');
$req->setHeader('Content-Type', 'application/x-www-form-urlencoded');
$req->setHeader('Accept-Charset', 'UTF-8');


$request_parameter = [
    'code' => $_REQUEST['code'],
    'client_id' => \CLIENT_ID,
    'client_secret' => \CLIENT_SECRET,
    'redirect_uri' => \REDIRECT_URL,
    'grant_type' => 'authorization_code'
];
foreach ($request_parameter as $key => $value) {
    $req->addPostParameter($key, $value);}


try{
    $res = $req->send();
   if ($res->getStatus() != 200) {
       error_log('doHttpRequest(): Request status is not 200: '.$res->getStatus());
        return false;
    }


    // get response
    $responses = json_decode($res->getBody());
$test=$res->getBody();
echo $test;
echo $responses->access_token;


    list($client_id_signature, $jwt_encoded) = explode(".", $responses->id_token);
    $jwt = json_decode(base64_decode($jwt_encoded));
    $sub = $jwt->sub;
    $email = $jwt->email;
echo '<br><br><br>';
$Atoken= $res->access_token;


} catch (\HTTP_Request2_Exception $e) {
    error_log('doHttpRequest(): HTTP_Request2_Exception: '.$this->getMessageByHttpRequest2ExceptionCode($e->getCode()));
    exit;
}

$ch = curl_init("https://userinfo.yahooapis.jp/yconnect/v1/attribute?schema=openid");
    curl_setopt($ch, CURLOPT_GET, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charser=UTF-8',
        'Authorization: Bearer ' . $Atoken
    ));
    $result = curl_exec($ch);
echo $result;
    curl_close($ch);


?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • CHERRY

    2017/11/10 07:23 編集

    エラーメッセージからすると Token が不一致みたいですが、$Atoken には、どのような値( access_token or refresh_token or それ以外 )が入っていますか?

    キャンセル

  • teityann1225

    2017/11/10 07:24

    アクセストークンです。

    キャンセル

  • CHERRY

    2017/11/10 07:44 編集

    callback.php の 83行目って どれになりますか? また、アクセストークンには、有効期限が、設定されていますが、有効期限内のアクセスでしょうか? PHPのバージョンはいくつでしょうか?

    キャンセル

  • teityann1225

    2017/11/10 12:50

    PHPは5.6です。アクセストークンは取得してすぐに使っています。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19153questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • API

    1420questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • cURL

    142questions

    cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。