2016-10-12 30 views
11

मैं Google एपीआई के साथ काम करने के लिए नया हूं लेकिन मेरे पास एक प्रोजेक्ट है जिसके लिए मुझे ईमेल द्वारा उपयोगकर्ता के प्रबंधक को खोजने के लिए अपने डोमेन तक पहुंचने की आवश्यकता है। कोड शुरू करने से पहले मैं सबकुछ सेट करना चाहता था इसलिए मैंने PHP के लिए example file का पालन किया। मैं इसे काम करने में सक्षम था लेकिन इसे समाप्त होने के बाद टोकन को रीफ्रेश करने के साथ कुछ समस्याएं थीं और शोध ने मुझे Service Account का उपयोग करने के लिए धक्का दिया, क्योंकि यह एक सर्वर क्रॉन स्क्रिप्ट है और मैं किसी भी उपयोगकर्ता इंटरैक्शन से निपटना नहीं चाहता हूं।Google एपीआई: 404 डोमेन नहीं मिला

मैं सेवा खाता बनाया था, सक्षम जी सुइट डोमेन चौड़ा प्रतिनिधिमंडल, और उपयोग जोड़ा के लिए: https://www.googleapis.com/auth/admin.directory.user.readonly

मैं अपने स्क्रिप्ट के साथ एक Google_Service_Exception मिलता है।

प्रतिक्रिया है:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "notFound", 
    "message": "Domain not found." 
    } 
    ], 
    "code": 404, 
    "message": "Domain not found." 
} 
} 

मैं इसका मतलब यह है कि यह खातों डोमेन पता नहीं है, लेकिन मुझे लगता है मैं यह कैसे हल कर सकते हैं नहीं दिख रहा है यह सोचते हैं रहा हूँ। मुझे लगता है कि अगर यह एक अनुमति मुद्दा था, तो Google मुझे बताएगा। मैंने ऑनलाइन खोज करने की कोशिश की लेकिन कोई भाग्य नहीं है क्योंकि मुझे मिले मुद्दों को एक अलग विधि का उपयोग कर रहे थे और फिक्स कुछ ऐसा नहीं था जो सेवा खाते पर किया जा सके। मैं अभी अटक गया हूं इसलिए मुझे उम्मीद है कि सही दिशा में धक्का मुझे ट्रैक पर लाएगा।

<?php 

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

define('CREDENTIALS_PATH', '/path/to/service_account.json'); 

define('SCOPES', implode(' ', array(
     Google_Service_Directory::ADMIN_DIRECTORY_USER_READONLY) 
)); 

date_default_timezone_set('America/New_York'); 

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

    return $client; 
} 

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

// Print the first 10 users in the domain. 
$optParams = array(
    'customer' => 'my_customer', 
    'maxResults' => 10, 
    'orderBy' => 'email', 
); 
$results = $service->users->listUsers($optParams); 

if (count($results->getUsers()) == 0) { 
    print "No users found.\n"; 
} else { 
    print "Users:\n"; 
    foreach ($results->getUsers() as $user) { 
     printf("%s (%s)\n", $user->getPrimaryEmail(), 
      $user->getName()->getFullName()); 
    } 
} 

मेरे service_account.json शामिल (स्पष्ट रूप से साफ)

{ 
    "type": "service_account", 
    "project_id": "PROJECT_ID", 
    "private_key_id": "PRIVATE_KEY_ID", 
    "private_key": "PRIVATE_KEY", 
    "client_email": "SERVICE_ACCOUNT_EMAIL.iam.gserviceaccount.com", 
    "client_id": "CLIENT_ID", 
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
    "token_uri": "https://accounts.google.com/o/oauth2/token", 
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_IDENTIFIER.iam.gserviceaccount.com" 
} 

इस पर किसी भी सहायता के लिए धन्यवाद:

यह परीक्षण स्क्रिप्ट मैं उपयोग कर रहा हूँ है।

+0

इस थ्रेड में दिखाए गए अनुसार स्कीमा में उपयोगकर्ता ऑब्जेक्ट बनाने का प्रयास करें http://stackoverflow.com/questions/23767994/404-resource-not-found-domain-with-google-direcotry-api। –

+0

वह एक उपयोगकर्ता को जोड़ रहा है, ठीक उसी मामले में नहीं, लेकिन मैंने अभी भी अनुरोध करने के लिए किसी ऑब्जेक्ट का उपयोग करने का प्रयास किया है। रुबी का एपीआई थोड़ा अलग है इसलिए मेरे पास वही तरीका नहीं था जो मैं अभी भी मुझे एक ही त्रुटि दे सकता था इसलिए मुझे लगता है कि मैंने इसे सही तरीके से किया है। मैं वर्तमान में एपीआई कोड पर जा रहा हूं यह देखने के लिए कि क्या मैं समझ सकता हूं कि इसे अपने दस्तावेज़ों से बेहतर तरीके से कैसे उपयोग किया जाए। प्रयास के लिए धन्यवाद – Jeremy

उत्तर

8

ठीक है, यह अनदेखा करने के लिए एक बहुत ही आसान कदम था लेकिन यह एक बेहद सरल फिक्स था।

यहां मुद्दा यह था कि खाते के लिए डोमेन की पहचान नहीं की गई थी। मैं इस धारणा के तहत था कि सेवा खाता पहले ही डोमेन से जुड़ा हुआ था लेकिन ऐसा नहीं है। इसलिए फिक्स क्लाइंट में जोड़ने के लिए कोड की केवल एक पंक्ति है जो इसे डोमेन में (मेरे मामले के लिए) उपयोगकर्ता को सेट करने के लिए जोड़ती है।

$client->setSubject('[email protected]'); 

मेरी getClient विधि करने के लिए:

मेरे लिए ठीक जोड़ने के लिए किया गया था।

तो अब लगता है कि विधि:

/** 
* Returns an authorized API client. 
* @return Google_Client the authorized client object 
*/ 
function getClient() { 
    $client = new Google_Client(); 
    $client->setApplicationName('TestingApp'); 
    $client->setAuthConfig(CREDENTIALS_PATH); 
    $client->setScopes(SCOPES); 
    $client->setSubject('[email protected]'); 
    return $client; 
} 

मैं इस उल्लेख in the API देखा था, लेकिन यह वैकल्पिक के रूप में यह कहा गया है। उम्मीद है कि यह किसी और की भी मदद करेगा।

0

मेरे लिए एक ही त्रुटि थी, लेकिन मुझे अपने कैलेंडर को सेवा खाता ईमेल (जो जेसन ऑथ फ़ाइल में मिला) के साथ साझा करने की आवश्यकता थी। उसके बाद, त्रुटि असंतुष्ट।

संबंधित मुद्दे