Google contacts api
을 사용하여 gmail
연락처를 얻으려고합니다. 이를 위해 OAuth 2.0
을 사용하고 있습니다. 이를 위해 나는 여기에 OAuth 2.0
을 사용하는 그들의 가이드를 읽었습니다. 대체로 내가 다음 단계OAuth 2.0이 서버 측 웹 응용 프로그램에서 작동하지 않습니다.
- 클라이언트 ID와 클라이언트 비밀을 구글에서 내 응용 프로그램을 등록하고 취득을 따라하고 지금
- 내
redirect uri
등록 내가 처음에sample.php
라는 파일을 만든get contacts
사용자가 클릭하면 그 - Google에서 확인을 요청하고 사용자가 연락처 정보를 제공하기로 동의하면
redirect uri
(code
)으로 리디렉션됩니다. - 이제 코드를 추출하고 OAuth 토큰을 얻으려는 게시물 요청을 만들고 토큰을 얻으면 연락처 요청을합니다. 이
<?php $client_id="my client id"; $client_sec="my client secret "; $redirect_uri="http://localhost/htdocs/contacts/redirect.php"; $code=$_GET['code']; $post="code=$code&client_id=$client_id&client_secret=$client_sec&redirect_uri=$redirect_uri&grant_type=authorization_code"; $post=urlencode($post); //the following curl request is made to get the authorization token $ch=curl_init(); $url="https://accounts.google.com/o/oauth2/token"; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_AUTOREFERER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $json=curl_exec($ch); curl_close($ch); echo $json; // this is showing Required parameter is missing: grant_type Error 400 $res=json_decode($json,true); print_r($res); // this is just for debugging $token=$res['access_token']; echo $token; // this is just for debugging $url="https://www.google.com/m8/feeds/contacts/default/full?oauth_token=$token"; //the following curl request is made to get the contacts $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_AUTOREFERER,1); $xml=curl_exec($ch); echo $xml; curl_close($ch); $dom= new DOMDocument(); $dom->loadXML($xml); $xpath=new DOMXPath($dom); $path='//gd:email'; $nodes=$xpath->query($path); echo $nodes->length."<br />"; foreach($nodes as $node) { $email=$node->attributes->getNamedItem('address')->nodeValue; echo $email."<br />"; } ?>
이제 문제는 4가 실패하는 단계입니다 같은
redirect.php
보이는위한
sample.php
에 대한 코드는 다음과
<?php
$client_id="my client id";
$redirect_uri="http://localhost/htdocs/contacts/redirect.php";
echo <<<doc
<html>
<body>
<a href="http://accounts.google.com/o/oauth2/auth?client_id=$client_id&redirect_uri=$redirect_uri&scope=https://www.google.com/m8/feeds/&response_type=code">
get contacts
</a>
doc;
echo <<<doc
</body>
</html>
doc;
?>
코드처럼 보인다. 그것은 확인 단계까지 순조롭게 진행하고 내가 Allow access
을 클릭하면
필수 매개 변수가 누락 난 내 redirect uri
로 리디렉션하고 있지만이
지금 나는 내가 grant_type
를 제공하고 있기 때문에 이것을 이해 해달라고 grant_type 오류 매개 변수. 나는 firebug
를보고 게시물 요청이 만들어졌지만 의도 한 것이 아니라는 사실을 알게되었습니다. 제출 요청은
https://accounts.google.com/o/oauth2/approval?xsrfsign=AC9jObYAAAAATkfm3uvx0sfsW7WVmB_FeRqVPLjDcTLz
이며 상태는 302 moved Temporarily
입니다. 나는 무슨 일이 벌어지고 있는지 이해하지 못한다. 그들은 OAuth workflow
에서 뭔가를 바꿨나요? 내가 grant_type
전에 공간을 제거하고 일 IkkeBU 편집 으로 제안 도움
이 필요합니다. 이제는 액세스 토큰을 얻을 수 있지만 여전히 연락처를 가져올 수 없습니다. (으로 오류가 발생하고 은 $dom->loadXML($xml)
을 참조하므로 get 요청이 이루어지지 않은 것으로 보입니다.) 게다가 할 수 없습니다. firebug
에서 게시 요청을 참조하십시오 (하지만 응답으로 액세스 토큰을 얻었 기 때문에 확실하게 만들어졌습니다). 나는 또한 요청을 볼 수 없다 firebug
나는 게시물 요청 후 무엇을 잘못 했나요?
업데이트 : 문제는 요청이 HTTPS에이었다이었다 그리고 난 HTTPS에 대한 적절한 헤더를 사용하지 않았다. 올바른 헤더를 사용했는데 제대로 작동했습니다. 문제가 해결 되었습니까? 아마도.난 아직 내가 사람들은 firebug's'
net` 탭
아마도 오타이지만 &와 grant_type 사이에는 공백이 있습니다. – Ikke
@Ikke 감사합니다. 이제는'액세스 토큰'을 얻을 수 있지만 아직 연락 할 수는 없습니다. 연락을받을 수 있는지 알려주지. 대답으로 게시하고 받아 들일 것입니다. 다시 한 번 감사드립니다 – lovesh
"연락처를 가져올 수 없음"이란 무엇을 의미합니까? – Ikke