среда, 16 марта 2016 г.

Делаем платежи для Google Play с проверкой на сервере

Всем привет! Хочу поделиться опытом подключения платежей к приложению из Google Play с проверкой на нашем сервере. Итак. У нас есть приложение, готовое для публикации. Так же создан платёжный проект.
В платёжном проекте необходимо создать ClientID как Web-Application и указать redirect_uri на наш сервер, а так же создать API Key типа  ServerKey. На сервере делаем обработчик входящей переменной code.
data = requests.post('https://accounts.google.com/o/oauth2/token',{'code':code,'grant_type':'authorization_code','client_id':client_id,'client_secret':client_secret,'redirect_uri':'http://server.ru/google_pay/'})
jdata = data.json()
if 'access_token' in jdata and 'token_type' in jdata and 'expires_in' in jdata:
  Redis.setex('GooglePayAccess',jdata['access_token'],jdata['expires_in'])
  Redis.setex('GooglePayType',jdata['token_type'],jdata['expires_in'])
  if "refresh_token" in jdata:
   Redis.set('GooglePayRefresh',jdata['refresh_token'])
Вот простой пример на Python с сохранением access_token и refresh_token в Redis. Далее необходимо заполнить страницу Credential а так же активировать API  "Google Play Android Developer API".  Теперь необходимо авторизировать сервис на нашем сервере. !!!!!! Обязательно это нужно сделать с того аккаунта, с которого был создан платёжный проект !!!!!!!! Далее переходим под этим аккаунтом по ссылке ниже, подставив вместо ....... наш ClientID. https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher& response_type=code&access_type=offline& redirect_uri=http://server.ru/google_pay/&client_id=... После активации аккаунта можем работать с платежами. Передаём на сервер данные о платеже, полученные клиентом от Google, и проверяем их по адресу
url = 'https://www.googleapis.com/androidpublisher/v2/applications/%s/purchases/products/%s/tokens/%s?key=%s' % (packageName,productId,purchaseToken,api_key)
response = requests.get(url,headers={"Authorization":"%s %s" % (token_type,access_token)})
jdata2 = response.json()
Но перед этим надо проверить валидность access_token. Ранее мы записали его в Redis и поставили время жизни 3600 (оно приходит в ответе на активацию). Далее если access_token просрочен делаем следующее:
if not access_token or not token_type:
   refresh_token = Redis.get('GooglePayRefresh')
   data = requests.post('https://accounts.google.com/o/oauth2/token',{'grant_type':'refresh_token','client_id':client_id,'client_secret':client_secret,'refresh_token':refresh_token})
   jdata = data.json()
   if 'access_token' in jdata and 'token_type' in jdata and 'expires_in' in jdata:
    access_token = jdata['access_token']
    token_type = jdata['token_type']
    Redis.setex('GooglePayAccess',access_token,jdata['expires_in'])
    Redis.set('GooglePayType',token_type,jdata['expires_in'])
Можем спокойно проводить платежи. Удачи!

Комментариев нет:

Отправить комментарий