开发者

OAUTH2 using PHP to get Google Contacts

i'm almost completed with my php script which will grab google contacts using OAuth2. I refer to the doc @ http://code.google.com/apis/accounts/docs/OAuth2.html

i dump the contacts and i'm getting these:

string(23704) "email@gmail.com2011-06-16T06:52:20.113Zusernameemail@gmail.comContacts127125http://www.google.com/m8/feeds/contacts/email%40gmail.com/base/02010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/12010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/42010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/52010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/62010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/72010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/82010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/92007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/a2007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/b2011-03-27T13:04:13.929Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/d2007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/e2009-09-22T06:00:55.117Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/f2009-09-22T06:00:55.117Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/102007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/112009-09-22T06:00:55.117Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/122009-09-22T06:00:55.117Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/132009-09-22T06:00:55.117Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/142007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/172007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base开发者_如何转开发/182007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/192007-08-03T00:28:51.761Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/1f84bcc8c755f912010-01-28T02:12:46.705Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/288c63e8bbcb04d2010-11-07T04:40:15.185Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/59573d50dfd5afd2010-10-28T05:29:23.690Zhttp://www.google.com/m8/feeds/contacts/email%40gmail.com/base/65b55458913d29f2010-06-07T15:53:28.946Z"

erm so how should i get the contact info such as the email, name, etc??

here are the codes: oauth_config.php

<?php
define('AUTHORIZATION_ENDPOINT', 'https://accounts.google.com/o/oauth2/auth');
define('ACCESS_TOKEN_ENDPOINT', 'https://accounts.google.com/o/oauth2/token');
define('CLIENT_ID', 'MY CLIENT_ID');
define('CLIENT_SECRET', 'WMY CLIENT_SECRET');
define('CALLBACK_URI', 'http://example.com/oauth2_callback_google.php');

/***************************************************************************
 * Function: Run CURL
 * Description: Executes a CURL request
 * Parameters: url (string) - URL to make request to
 *             method (string) - HTTP transfer method
 *             headers - HTTP transfer headers
 *             postvals - post values
 **************************************************************************/
function runCurl($url, $method = 'GET', $postvals = null) {
    $ch = curl_init($url);

    //GET request: send headers and return data transfer
    if ($method == 'GET'){
        $options = array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => 1
        );
        $result = curl_setopt_array($ch, $options);
    //POST / PUT request: send post object and return data transfer
    } else {
        $options = array(
            CURLOPT_URL => $url,
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => $postvals,
            CURLOPT_RETURNTRANSFER => 1
        );
        $result = curl_setopt_array($ch, $options);
    }

    $response = curl_exec($ch);     
    curl_close($ch);

    return $response;
}

/***************************************************************************
 * Function: Refresh Access Token
 * Description: Refreshes an expired access token
 * Parameters: key (string) - application consumer key
 *             secret (string) - application consumer secret
 *             refresh_token (string) - refresh_token parameter passed in
 *                to fetch access token request.
 **************************************************************************/
function refreshToken($refresh_token) {
    //construct POST object required for refresh token fetch
    $postvals = array('grant_type' => 'refresh_token',
                      'client_id' => CLIENT_ID,
                      'client_secret' => CLIENT_SECRET,
                      'refresh_token' => $refresh_token);

    //return JSON refreshed access token object
    return json_decode(runCurl(ACCESS_TOKEN_ENDPOINT, 'POST', $postvals));
}

?>

oauth_index.php

/**
 * This script will be the first to be initiated
 * It will call Google
 */

require_once('oauth2_config.php');

$accessTokenUri = AUTHORIZATION_ENDPOINT
                  ."?client_id=".CLIENT_ID
                  ."&redirect_uri=".CALLBACK_URI
                  ."&scope=https://www.google.com/m8/feeds/"
                  ."&response_type=code";

// Redirect user to Google to get access token
header("Location:".$accessTokenUri);
exit();

oauth_callback_google.php

/**
 * This is the google callback script.
 * After user approves / decline with the Google application,
 * Google will redirect to this script (as define in Google APIs settings)
 */

require_once('oauth2_config.php');

$code = $_GET['code'];
$error = $_GET['error'];

if (isset($error)) {
    exit();
}

if (!isset($code)) {
    exit();
}

//construct POST object for access token fetch request
$post = array('code' => $code,
              'client_id' => CLIENT_ID,
              'client_secret' => CLIENT_SECRET,
              'redirect_uri' => CALLBACK_URI,
              'grant_type' => 'authorization_code',);

//get JSON access token object (with refresh_token parameter)
$token = json_decode(runCurl(ACCESS_TOKEN_ENDPOINT, 'POST', $post));

//set request headers for signed OAuth request
$headers = array("Accept: application/json");

//construct URI to fetch contact information for current user
$contact_url = "https://www.google.com/m8/feeds/contacts/default/full?"
               ."oauth_token=".$token->access_token;

//fetch profile of current user
$contacts = runCurl($contact_url, 'GET', $headers);
var_dump($contacts);

//echo "<h1>REFRESHING TOKEN</h1>";
var_dump(refreshToken($token->refresh_token));

So run the oauth_index.php. after user approve, google will redirect to oauth_callback_google.php which is where im left hanging.


In case anyone else bumps into this question, I'll post the answer:

You are getting the fully formed XML that contains all the information. However, your browser is attempting to render this XML as HTML. To see the fully returned XML, right-click - > View Source.

Eventually, you will want to pass the returned XML to an XML library and parse it.


 $url = 'https://www.google.com/m8/feeds/contacts/usermail/full?max-results='.$max_results.'&oauth_token='.$accesstoken.'&alt=json&updated-min=2007-03-16T00:00:00';
 function curl_file_get_contents($url)
 {

 $curl = curl_init();
 $userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';

 curl_setopt($curl,CURLOPT_URL,$url);   //The URL to fetch. This can also be set when initializing a session with curl_init().
 curl_setopt($curl, CURLOPT_HTTPHEADER,array('GData-Version: 2.0'));
 curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);    //TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
 curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,5);   //The number of seconds to wait while trying to connect.    
 curl_setopt($curl,CURLOPT_HTTPGET,true);
 curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); //The contents of the "User-Agent: " header to be used in a HTTP request.
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); //To follow any "Location: " header that the server sends as part of the HTTP header.
//curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);    //To automatically set the Referer: field in requests where it follows a Location: redirect.
curl_setopt($curl, CURLOPT_TIMEOUT, 10);    //The maximum number of seconds to allow cURL functions to execute.

//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); //To stop cURL from verifying the peer's certificate.

$contents = curl_exec($curl);

curl_close($curl);
return $contents;

}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜