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

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

新規登録して質問してみよう
ただいま回答率
85.51%
cURL

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

PHP

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

API

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

Q&A

解決済

1回答

1147閲覧

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

teityann1225

総合スコア158

cURL

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

PHP

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

API

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

0グッド

1クリップ

投稿2017/11/09 14:46

編集2017/11/10 03:53

###やりたいこと
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?>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2017/11/09 22:43 編集

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

2017/11/09 22:24

アクセストークンです。
CHERRY

2017/11/09 22:56 編集

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

2017/11/10 03:50

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

回答1

0

自己解決

無事、取得できました。

投稿2019/05/23 17:07

teityann1225

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問