2017-11-19 14 views
0

PHPを使用してGoogleの連絡先に新しい連絡先のエントリをプッシュしたいです。PHPを使用してGoogleの人々apiに新しい連絡先をプッシュ

以下は私のindex.phpコードです。

require_once 'vendor/autoload.php'; 
session_start(); 

$client = new Google_Client(); 


$client->setClientId('519334414648- 
f2jiml3iuuj87mjn1ofc9kbqmlsn7iqb.apps.googleusercontent.com'); 
$client->setClientSecret('0x9LpW7Qr37x89YFRtmgq6oH'); 
$client->setRedirectUri('http://example.com/demo/contacts/redirect.php'); 

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

if (isset($_GET['oauth'])) { 
// Start auth flow by redirecting to Google's auth server 
$auth_url = $client->createAuthUrl(); 
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 
} 

else if (isset($_GET['code'])) { 
// Receive auth code from Google, exchange it for an access token, and 
// redirect to your base URL 
$client->authenticate($_GET['code']); 
$_SESSION['access_token'] = $client->getAccessToken(); 
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/demo/contacts'; 
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 

else if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 
// You have an access token; use it to call the People API 
$client->setAccessToken($_SESSION['access_token']); 
$client->setAccessType('online'); 
// TODO: Use service object to request People data 

$client->addScope(Google_Service_PeopleService::CONTACTS); 
$service = new Google_Service_PeopleService($client); 

$person = new Google_Service_PeopleService_Person(); 
$person->setPhoneNumbers('1234512345'); 

$name = new Google_Service_PeopleService_Name(); 
$name->setDisplayName('test user'); 
$person->setNames($name); 
$exe = $service->people->createContact($person); 

} 

else { 
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/demo/contacts?oauth'; 
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 

以下のコードを実行するとこのエラーが発生します。 ' "エラー:{ "エラー ":{ " code ":401、 "メッセージ ":"リクエスト "}" OAuth 2アクセストークン、ログインクッキーまたはその他の有効な認証資格が必要です "というメッセージが表示されます。 Can私のコードが正しいかどうか?連絡先や人々のAPIへの接触を押すcoorect方法を提案してくださいいない場合は任意のものを教えてください。1。

答えて

1

をあなたがこのdocumentationを参照することができます。

を完全なステップは、前記で詳述されましたドキュメントを参照することで、結果を得ることができます。

Here、コードはまた、連絡先を作成するには、

<?php 
require_once __DIR__ . '/vendor/autoload.php'; 


define('APPLICATION_NAME', 'People API PHP Quickstart'); 
define('CREDENTIALS_PATH', '~/.credentials/people.googleapis.com-php-quickstart.json'); 
define('CLIENT_SECRET_PATH', __DIR__ . '/client_secret.json'); 
// If modifying these scopes, delete your previously saved credentials 
// at ~/.credentials/people.googleapis.com-php-quickstart.json 
define('SCOPES', implode(' ', array(
    Google_Service_PeopleService::CONTACTS_READONLY) 
)); 

if (php_sapi_name() != 'cli') { 
    throw new Exception('This application must be run on the command line.'); 
} 

/** 
* Returns an authorized API client. 
* @return Google_Client the authorized client object 
*/ 
function getClient() { 
    $client = new Google_Client(); 
    $client->setApplicationName(APPLICATION_NAME); 
    $client->setScopes(SCOPES); 
    $client->setAuthConfig(CLIENT_SECRET_PATH); 
    $client->setAccessType('offline'); 

    // Load previously authorized credentials from a file. 
    $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH); 
    if (file_exists($credentialsPath)) { 
    $accessToken = json_decode(file_get_contents($credentialsPath), true); 
    } else { 
    // Request authorization from the user. 
    $authUrl = $client->createAuthUrl(); 
    printf("Open the following link in your browser:\n%s\n", $authUrl); 
    print 'Enter verification code: '; 
    $authCode = trim(fgets(STDIN)); 

    // Exchange authorization code for an access token. 
    $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); 

    // Store the credentials to disk. 
    if(!file_exists(dirname($credentialsPath))) { 
     mkdir(dirname($credentialsPath), 0700, true); 
    } 
    file_put_contents($credentialsPath, json_encode($accessToken)); 
    printf("Credentials saved to %s\n", $credentialsPath); 
    } 
    $client->setAccessToken($accessToken); 

    // Refresh the token if it's expired. 
    if ($client->isAccessTokenExpired()) { 
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 
    file_put_contents($credentialsPath, json_encode($client->getAccessToken())); 
    } 
    return $client; 
} 

/** 
* Expands the home directory alias '~' to the full path. 
* @param string $path the path to expand. 
* @return string the expanded path. 
*/ 
function expandHomeDirectory($path) { 
    $homeDirectory = getenv('HOME'); 
    if (empty($homeDirectory)) { 
    $homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH'); 
    } 
    return str_replace('~', realpath($homeDirectory), $path); 
} 

// Get the API client and construct the service object. 
$client = getClient(); 
$service = new Google_Service_PeopleService($client); 

// Print the names for up to 10 connections. 
$optParams = array(
    'pageSize' => 10, 
    'personFields' => 'names,emailAddresses', 
); 
$results = $service->people_connections->listPeopleConnections('people/me', $optParams); 

if (count($results->getConnections()) == 0) { 
    print "No connections found.\n"; 
} else { 
    print "People:\n"; 
    foreach ($results->getConnections() as $person) { 
    if (count($person->getNames()) == 0) { 
     print "No names found for this connection\n"; 
    } else { 
     $names = $person->getNames(); 
     $name = $names[0]; 
     printf("%s\n", $name->getDisplayName()); 
    } 
    } 
} 

を提供して、あなたはこのMethod: people.createContactを使用することができます。

新しい連絡先を作成し、その連絡先の個人リソースを返します。

OAuth 2.0の詳細については、hereを参照してください。

また、問題に該当する場合は、このエラーの対策についてSO postを確認することができます。

関連する問題