2015-08-13 13 views
10

Python'da google API kullanarak çok garip bir istisna yapıyorum. Amaç, sunucu tarafında bir Android uygulamasından uygulama içi aboneliğe karşılık gelen bir jetonun geçerliliğini kontrol etmektir.Google API, üretimde geçersiz_grant döndürüyor, ancak yerel değil

Yani bunu yapmak için, bizim Google Play hesabına bağlı bir hizmet hesabı var ve biz (geçişdeyimi çıkarmak için bir PEM sertifika dönüştürülmüş) p12 tuşu aracılığıyla oauth kullanarak talebimizi authentify deneyin:

from apiclient.discovery import build 
from httplib2 import Http 
from oauth2client.client import SignedJwtAssertionCredentials 

with open("googleplay.pem") as f: 
    private_key = f.read() 
credentials = SignedJwtAssertionCredentials(GOOGLE_CLIENT_EMAIL, private_key, scope=['https://www.googleapis.com/auth/androidpublisher']) 
http_auth = credentials.authorize(Http()) 
client = build('androidpublisher', 'v2', http=http_auth) 

Ve bu, bilgisayarımda mükemmel çalışıyor. Ancak son satır benim sunucularda bir istisna tetikler: invalid_grant

Bunun nereden geldiğini anlamıyorum! Bununla yardımcı olabilirseniz, harika olurduk!

bir PEM sertifika p12 belgesi dönüştürmek için kullanılan bir ek kod:

openssl pkcs12 -in privatekey.p12 -nodes -nocerts > privatekey.pem 

Sonra ilk 4 satırları çıkarıldı.

Şimdiden teşekkürler!

cevap

0

Bunun herhangi bir ipucu vermesine yardımcı olup olmayacağından emin değilsiniz.

Yakın zamanda benzer bir hata iletisiyle ilgili bir sorunu giderdim ("invalid_grant" ifadesini de içerir). Dava, başarısız kimlik bilgilerinin yenilenmesine neden olan OAuth2 kimlik bilgilerinde bir refresh_token değerinin bulunmamasıydı. Bu yüzden düzeltmem, google'dan yeni yenileme jetonu almaktı. Google, yalnızca bir kullanıcının google ile ilk kez yetkilendirdiği yeniliği dağıtır. Kullanıcı uygulamayı kesmez ve yeniden yetkilendirmezse. Veya uygulamada, flow.params['approval_prompt'] = 'force' (genellikle yerel hata ayıklama için) ayarlanır.

Durumum, web uygulaması ve OAuth2 yetkilendirmesi için kimlik bilgileriyle ilgilidir. Sizinki bir hizmet hesabı gibi görünüyor, bu yüzden probleminizin de bir sorun olup olmadığından emin değilim.

+0

Hum teşekkür umut ama bu benim durum için uygun olduğunu düşünmüyorum. :( – arthur

0

Tam olarak aynı sorunu yaşadım.

Yalnızca bir kök sunucu üzerinde çalışacak NTP

Bu kullanarak sistem saatini senkronize ederek düzelttim. Sanal bir sunucuda değil. Bir vServer kiraladığınızda sunucu barındırma sağlayıcınıza başvurun.

Aslında, bu yüzden bu sorunu olmamalıdır bir hizmet hesabı kullanıyorum ... Ben :) bu yardımcı olur