我的网站不会显示任何联系人?

时间:2016-02-04 09:17:02

标签: php google-app-engine google-api google-contacts

当我点击main.php中的<a>导入联系人时,我点击谷歌的接受,所以我允许他们查看我的联系人。然后当我回到自己的页面时...它根本没有显示任何联系人。我想这是因为我没有回复任何联系,但我不知道如何。

的app.yaml:

application: csimporttest
version: 1
runtime: php55
api_version: 1

handlers:
- url: /.*
  script: main.php

main.php:

    <!DOCTYPE html>
    <html>

    <head>
    </head>

    <body>
    <h2>Hi!</h2>

    <?php include('response-callback.php');?>

    <a href="<?php echo $googleImportUrl;?>"> Import </a>

    </body>

    </html>

响应callback.php;

<?php

session_start();

require_once 'google-api-php-client-master/src/Google/autoload.php';

$google_client_id = 'SECRET';
$google_client_secret = 'SECRET';
$google_redirect_uri = 'https://csimporttest.appspot.com/response-callback.php';

//setup new google client
$client = new Google_Client();
$client -> setApplicationName('csimporttest');
$client -> setClientid($google_client_id);
$client -> setClientSecret($google_client_secret);
$client -> setRedirectUri($google_redirect_uri);
$client -> setAccessType('online');

$client -> setScopes('https://www.googleapis.com/auth/contacts.readonly');

$googleImportUrl = $client -> createAuthUrl();

function curl($url, $post = "") {
    $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_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.
    if ($post != "") {
        curl_setopt($curl, CURLOPT_POST, 5);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    }
    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;
}

//google response with contact. We set a session and redirect back
if (isset($_GET['code'])) {
    $auth_code = $_GET["code"];
    $_SESSION['google_code'] = $auth_code;
    header('Location: ' . $google_redirect_uri);
}

if(isset($_SESSION['google_code'])) {
    $auth_code = $_SESSION['google_code'];
    $max_results = 200;
    $fields=array(
        'code'=>  urlencode($auth_code),
        'client_id'=>  urlencode($google_client_id),
        'client_secret'=>  urlencode($google_client_secret),
        'redirect_uri'=>  urlencode($google_redirect_uri),
        'grant_type'=>  urlencode('authorization_code')
    );
    $post = '';
    foreach($fields as $key=>$value)
    {
        $post .= $key.'='.$value.'&';
    }
    $post = rtrim($post,'&');
    $result = curl('https://www.googleapis.com/oauth2/v4/token',$post);
    $response =  json_decode($result);
    $accesstoken = $response->access_token;
    $url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results='.$max_results.'&alt=json&v=3.0&oauth_token='.$accesstoken;
    $xmlresponse =  curl($url);
    $contacts = json_decode($xmlresponse,true);

    $return = array();
    if (!empty($contacts['feed']['entry'])) {
        foreach($contacts['feed']['entry'] as $contact) {
           //retrieve Name and email address  
            $return[] = array (
                'name'=> $contact['title']['$t'],
                'email' => $contact['gd$email'][0]['address'],
            );
        }               
    }

    $google_contacts = $return;

    unset($_SESSION['google_code']);

}

 if (!empty($contacts['feed']['entry'])) {
 foreach($contacts['feed']['entry'] as $contact) {
            //retrieve Name and email address  
 $return[] = array (
 'name'=> $contact['title']['$t'],
 'email' => $contact['gd$email'][0]['address'],
 );

            //retrieve user photo
 if (isset($contact['link'][0]['href'])) {

 $url =   $contact['link'][0]['href'];

 $url = $url . '&access_token=' . urlencode($accesstoken);

 $curl = curl_init($url);

         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($curl, CURLOPT_TIMEOUT, 15);
 curl_setopt($curl, CURLOPT_VERBOSE, true);

         $image = curl_exec($curl);
         curl_close($curl);

 }

                        $return['image'] = $image;

                        echo '';

 } 
 }


?>

2 个答案:

答案 0 :(得分:1)

代码执行的最后一件事就是设置&#39; $ google_contacts = $ return&#39;,因此您可以使用$ google_contacts数组对您的应用做一些有用的事情,例如显示它。 blog where this code originated并未提及代码示例显示任何内容,只是它是如何检索联系人的示例。

答案 1 :(得分:0)

您可以使用var_dump()查看数组google_contacts是否实际已填充。把它放在main.php中:

<?php
var_dump($google_contacts);
?>

如果你在var_dump中得到一个输出,你可以使用一个html表和一个简单的foreach,如下所示:

<table border='1' class="table table-striped table-condensed">
<thead>
<tr>
    <th>Naam </th>
    <th>Email </th>
</tr>
</thead>
<tbody>
<?php
foreach ($google_contacts as $contacts){
    echo'<tr>';
    echo'<td>'. $contacts['name']."</td>";
    echo'<td>'. $contacts['email'].'</td>';
    echo'</tr>';
}
?>
</tbody>

</table>