2015-12-20 19 views
6

hızlı başlangıç ​​komut dosyası çalıştırılırken hata alıyorum: Senaryonun ilk kez çalıştırdığınızda https://developers.google.com/drive/v2/web/quickstart/phpSayı, ben hızlı başlangıç ​​php burada komut dosyası ile bir sorunla karşı karşıya am

, mükemmel yürütür ve erişim jeton adlı bir dosyada saklanır: drive-php-quickstart.json

Senaryonun ikinci kez çalıştırdığınızda, bana hata veriyor:

hata başlatın:

Notice: Undefined index: \ google-api-php-istemci expires_in \ src \ hattı 485

Ölümcül hata Google \ Client.php: yenileme jetonu geçirilen veya ayarlanmalıdır mesajla yakalanmamış özel durum 'LogicException''

Hata sonunda setAccessToken' bir parçası olarak:

Benim varsayım dosyasında kayıtlı olduğu erişim belirteci doğru biçimde değil olmasıdır.

Güncel biçimi:

ya29.CODE-oN_Bearer36001/_ANOTHER-KOD-ANOTHER_ANOTHER_CODE Eğer bu

Herhangi önerileri "expires_in" değişken içermez görebileceğiniz gibi

nerede yanlış mı gidiyorum Komutu olduğu gibi değiştirmeden çalıştırıyorum.

+0

ne, sen App Engine üzerinde çalışan tam olarak?İşaret ettiğin hızlı başlangıç ​​ve anlaşılan sorunun tüm metni, yerel olarak çalıştığınızı ve App Engine ile ilgisi olmadığını gösteriyor. Eğer öyleyse, etiketleri değiştirir misiniz? Yoksa, App Engine'in nereye gireceğini açıklamak için sorunuzu düzenleyin. Teşekkürler. –

+0

Teşekkür ederim Alex. Değişiklikleri yaptım. Evet, şu anda yerel olarak çalıştırıyorum ancak kısa bir süre içinde Google App Engine'e aktarıyorum. – CalmWinds

+0

Kesin sorun var. Komut dosyasını hiçbir değişiklik olmadan çalıştırıyor. İlk kez mükemmel bir şekilde çalışıyor, ikinci seferde "yenileme belirteci ile geçirilmeli veya setAccessToken" in parçası olarak ayarlanmalıdır. – Erfan

cevap

12

Hata ayıkladım .... Bunu yazan kişi, auth sonucunu token.json dosyasına yazmadan önce json_encode numaralı telefonu arayarak hata yaptı.

file_put_contents($credentialsPath, json_encode($accessToken)); 

Umarım geri bildirimi gönderdiğinizde:

Sen 45.

So ...

file_put_contents($credentialsPath, $accessToken); 

... olmalı hattında json_encode ekleyerek çözebilirsiniz düzeltilecek.

düzenleme: aynı sorun aynı yöntemle belirtecinin yenilenmesi çağrısı

edit2 için gerçekleşir: Aşağıdaki satırlar boyunca bir şey önerdi https://github.com/google/google-api-php-client/issues/263#issuecomment-186557360

: İşte benim ilişkili bir Github tartışmada yorum ve Google'dan bir cevap değil :

if ($client->isAccessTokenExpired()) { 
    $refreshToken = $client->getRefreshToken(); 
    $client->refreshToken($refreshToken); 
    $newAccessToken = $client->getAccessToken(); 
    $newAccessToken['refresh_token'] = $refreshToken; 
    file_put_contents($credentialsPath, json_encode($newAccessToken)); 
} 

yerine:

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

Teşekkürler! Ayrıca geri bildirim gönderdim. 47 –

+0

@RoshanBhumbra satırında görünse de, evet, belki de 47'dir. Bu Github biletinde daha fazla bilgi var: https://github.com/google/google-api-php-client/issues/263#issuecomment -186557360 – Erfan

+0

@Erfan - Github yorumunuzda hemen hemen refresh_token ayarını uygulamak zorunda kaldım. Bu pasajdan buraya bahsedebilir veya bu pasajı yapıştırabilir misiniz? Faydalı olacağını hissediyorum. –

0

Google, bu işlemek için geliştirilmiş bir yöntemle, onların PHP Quickstart güncelledi:

// Exchange authorization code for an access token. 
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode); 
$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())); 
} 
İlgili konular