Проверка покупки в приложении Google Play на сервере

Поэтому я действительно не понимаю, что мне делать, если проверка получения на сервере не удалась. Есть ли способ дождаться проверки сервера, чтобы затем принять транзакцию, которая будет взимать плату с пользователя, и сказать мне, что я должен дать ему расходный материал.

Я использую расширение Marmalade «s3eAndroidGooglePlayBilling», которое использует IBAHelper — я нашел там подтверждение, но на самом деле я не знаю Java и не могу найти в документации по Android Billing v3, как оно отменяет транзакцию, если проверка не удалась (например, для покупок в приложении ios). Но также мне нужно сделать проверку на стороне сервера.

Или мне просто проверить на сервере и дать пользователю расходный материал на основе этого? но это кажется плохой идеей, потому что, если сервер не ответил, пользователь уже потратил деньги, но клиент не знает, была ли покупка действительной.

ПРИМЕЧАНИЕ: это не просто вопрос Marmalade, это больше похоже на то, что я должен сделать на клиенте для проверки сервера, чтобы не взимать плату с пользователя, если сервер считает, что квитанция недействительна (потому что я думаю, что могу изменить расширение и используйте его как обычно)

ПРИМЕЧАНИЕ 2: Серверная часть уже реализована, и клиент получает сообщение, действительна ли покупка или нет, но я не знаю, что с этим делать на стороне клиента, чтобы дать пользователю монеты и списать его только после что (если покупка была действительной).


person Stals    schedule 29.10.2013    source источник
comment
расходуемые предметы означают, что вы можете покупать один и тот же предмет более одного раза, записи которых не будут обрабатываться Google Play, за исключением однократной покупки (нерасходуемый предмет). Вы должны управлять на стороне приложения или на стороне сервера, чтобы справиться с этим. Убедитесь, что вы собираетесь приобрести один продукт один раз или несколько раз.   -  person Maulik    schedule 29.10.2013
comment
@Maulik да, я понимаю, я даю монеты пользователю, если покупка была успешной, поэтому мне нужно потреблять, чтобы использовать их снова. Что мне нужно знать, так это то, что покупка действительно действительна, чтобы не давать монеты за недействительные покупки (например, дубликаты), но также и не взимать за это плату.   -  person Stals    schedule 29.10.2013
comment
вы можете просто получить это, используя результат метода onActivityResult(). в случае успеха разрешите пользователю собирать монеты. проверьте эти ссылки: 1) developer.android.com/google/ play/billing/ 2) stackoverflow.com/questions/19152065/   -  person Maulik    schedule 29.10.2013
comment
@Maulik Да, но для этого не используется проверка на стороне сервера, а только та, которая находится внутри IBAHelper. В настоящее время, если проверка внутри IBAHelper не удалась - с пользователя не будет взиматься плата (правильно?), это то, что я хочу для проверки частного сервера.   -  person Stals    schedule 29.10.2013
comment
вы должны справиться с этим на своей стороне, и, вызвав веб-службу, вы можете обновить свои данные на своем частном сервере после завершения покупки расходных материалов. И я думаю, что покупка состояния API не будет работать для расходных материалов.   -  person Maulik    schedule 29.10.2013
comment
@Maulik Проблема не в том, чтобы дать пользователю монеты, проблема в том, чтобы не взимать с него плату, если частный сервер говорит, что квитанция недействительна, но IBAHelper грустит, что она была действительной.   -  person Stals    schedule 30.10.2013
comment
проверьте эти ссылки: support.google.com/googleplay/answer/113515?hl= ru и developers.google.com/android-publisher/v1_1 Я думаю, что это будет невозможно программно для продуктов приложений. Надеюсь, это поможет вам.   -  person Maulik    schedule 30.10.2013


Ответы (1)


в расширении s3eAndroidMarketBilling есть функция s3eAndroidMarketBillingConfirmNotifications. Вы должны вызвать его, когда получите обратный вызов о покупке. И этот вызов сделает транзакцию закрытой. Если вы не вызовете эту функцию (ваш сервер не отвечает), вы получите все незакрытые транзакции в функциях обратного вызова s3eAndroidMarketBilling. И если вы используете элемент с управлением Google Play, вы можете использовать s3eAndroidMarketBillingRestoreTransactions для восстановления всех пользовательских транзакций.

person user2974769    schedule 09.11.2013
comment
Спасибо за твой ответ. Но что мне делать, если серверу грустно, что квитанция недействительна? я не могу просто не вызывать s3eAndroidMarketBillingConfirmNotifications, потому что рынок позже уведомит приложение об этой покупке, которая была недействительной. - person Stals; 11.11.2013