Потребление отмененных покупок в Google Play In-App Billing

Я работаю над приложением, которое использует Google Play In-App Billing V3 для продажи товара, действительного в течение определенного периода времени. После того, как пользователь совершит покупку, я отправляю данные о покупке на наш сервер и сразу же уничтожаю ее, если она будет успешной. Затем сервер предоставляет доступ к дополнительной службе для этого конкретного пользователя до окончания периода. Примечание. Я не использую подписки в приложении.

Я тестирую покупки у тестируемых пользователей в режиме песочницы, где оплата не производится. Большинство из них успешны, и этот поток отлично работает. Однако иногда мои покупки немедленно отменяются Google. В истории заказов в моей учетной записи Google Checkout я вижу строку:

«Для вашей защиты Google отменил этот заказ. Сделка считалась мошеннической».

Даже если это произойдет, я вижу, что я получаю "purchaseState": 0 в данных о покупке, что указывает на успех. Кроме того, попытка потребления этого продукта также приводит к успеху (вызов IInAppBillingService.consumePurchase(version, package, token) возвращает 0). Запрос моего инвентаря в более позднее время показывает, что у меня нет покупок (и, следовательно, нет возмещений / отменяет), и я могу снова купить тот же товар снова. Это то же поведение, что и в нормальном, несостоявшемся состоянии.

  1. Google часто отменяет заказы таким же образом, за пределами тестовой тестовой камеры?
  2. Могут ли товары, которые были успешно куплены и израсходованы, все же будут отменены (т.е. возвращены деньги) по причинам, не зависящим от разработчика?
  3. Можно ли узнать об аннулировании продуктов, которые уже были использованы?

Solutions Collecting From Web of "Потребление отмененных покупок в Google Play In-App Billing"

Google часто отменяет заказы таким же образом, за пределами тестовой тестовой камеры?

У Google есть система обнаружения мошенничества, которая помогает идентифицировать ненадежную оплату. Например, если кто-то использует украденную кредитную карту или одну и ту же кредитную карту, используется несколькими учетными записями и т. Д. В этом случае транзакция платежа прекратится еще до ее начала (до того, как поставщик платежа свяжется с ним) с сообщением в вашем вопросе. В мае эта система обнаружения мошенничества не смогла надежно обнаружить тестовые учетные записи, поэтому вы могли видеть это сообщение. В настоящее время он немного лучше. В реальной жизни это случается очень редко.

Могут ли товары, которые были успешно куплены и израсходованы, все же будут отменены (т.е. возвращены деньги) по причинам, не зависящим от разработчика?

Это сложный вопрос, потому что отменяется не элемент, а транзакция платежа, связанная с этим элементом. Теоретически, транзакция может быть отменена и позже, но для этого должна быть веская причина. Здесь может быть использован тот же пример с украденной кредитной картой. В реальной жизни я никогда не видел этого раньше.

Можно ли узнать об аннулировании продуктов, которые уже были использованы?

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

Надеюсь это поможет.

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

Я отслеживаю всю информацию о покупке, и я пытался отменить уже потребленный заказ. Я могу подтвердить, что статус заказа изменится (через 10 минут больше или меньше, вы также получите письмо об отмене).

Вызов этого URL-адреса PurchaseAPI с помощью вашего productId и purchaseToken вернет информацию о покупке:

 https://www.googleapis.com/androidpublisher/v2/applications/<app.package.name>/purchases/products/<productId>/tokens/<purchaseToken>?access_token=<myToken> 

В первый раз вы получите аналогичный ответ:

 { "kind": "androidpublisher#productPurchase", "purchaseTimeMillis": "1458047931024", "purchaseState": 0, "consumptionState": 1, "developerPayload": "mypurchasetoken" } 

И после отмены покупкиState изменится:

 { "kind": "androidpublisher#productPurchase", "purchaseTimeMillis": "1458047931024", "purchaseState": 1, "consumptionState": 1, "developerPayload": "mypurchasetoken" } 

Это тот же GET, что и в первый раз для проверки продукта.
Вероятно, разумно настроить периодическую проверку состояния купленных товаров и, в случае отмены, обновить покупку на сервере.