2012-02-11 5 views
0

oAuth 2.0을 사용하여 전자 메일, 연락처, 문서 등 여러 권한에 대해 access_token을 얻을 수 있습니다. 나는 access_token을 가지고있다 다음 코드를 사용하여 연락처가있다.Google API access_token을 사용하여받은 편지함 이메일을 받으시겠습니까?

$url = 'https://www.google.com/m8/feeds/contacts/default/full?max- results='.$max_results.'&oauth_token='.$access_token; 

$response_contacts= curl_get_file_contents($url); 

이제이 access_token을 사용하여 사용자의 이메일을 받고 싶습니다. 이 URL을 사용했습니다. 하지만 내가 access_token이 사용하는 이메일을 얻을 수있는 방법 401 unauthorized Error

$url = 'https://mail.google.com/mail/feed/atom&oauth_token='.$access_token; 
$response_emails= curl_get_file_contents($url); 

이 나를 인도하시기 바랍니다 제공합니다.

답변

2

요청 매개 변수로 oauth_token을 사용하여 Gmail 피드에 대한 참조를 보았습니다. 그러나 일단 OAuth Playground을 사용하면 OAuth 정보를 Authorization 헤더로 전달해야한다는 것을 알게되었습니다. 아래에서 확인할 수 있습니다.

<?php 
$now = time(); 
$consumer = ...; // your own value here 
$secret = ...; // your own value here 
$nonce = ...; // same value you've been using 
$algo = "sha1"; 
$sigmeth = "HMAC-SHA1"; 
$av = "1.0"; 
$scope = "https://mail.google.com/mail/feed/atom"; 
$path = $scope; 
$auth = ...; // an object containing outputs of OAuthGetAccessToken 

$args = "oauth_consumer_key=" . urlencode($consumer) . 
    "&oauth_nonce=" . urlencode($nonce) . 
    "&oauth_signature_method=" . urlencode($sigmeth) . 
    "&oauth_timestamp=" . urlencode($now) . 
    "&oauth_token=" . urlencode($auth->oauth_token) . 
    "&oauth_version=" . urlencode($av); 

$base = "GET&" . urlencode($path) . "&" . urlencode($args); 

$sig = base64_encode(hash_hmac($algo, $base, 
    "{$secret}&{$auth->oauth_token_secret}", true)); 

$url = $path . "?oauth_signature=" . urlencode($sig) . "&" . $args; 

// Create a stream 
$opts = array(
    "http" => array(
    "method" => "GET", 
    "header" => "Authorization: OAuth " . 
     "oauth_version=\"{$av}\", " . 
     "oauth_nonce=\"{$nonce}\", " . 
     "oauth_timestamp=\"{$now}\", " . 
     "oauth_consumer_key=\"{$consumer}\", " . 
     "oauth_token=\"{$auth->oauth_token}\", " . 
     "oauth_signature_method=\"{$sigmeth}\", " . 
     "oauth_signature=\"{$sig}\"\r\n" 
) 
); 

$context = stream_context_create($opts); 

$out = file_get_contents($path, false, $context); 
?> 
관련 문제