API аннулированных покупок Google Play предоставляет список заказов, связанных с покупками, которые пользователь отменил. Информацию из этого списка можно использовать для реализации системы отзыва, которая заблокирует пользователю доступ к товарам из этих заказов.
Этот API применяется к разовым заказам в приложении и подпискам на приложение.
Покупку можно аннулировать следующими способами:
- Пользователь запрашивает возврат средств за свой заказ.
- Пользователь отменяет свой заказ.
- Заказ списан.
Застройщик отменяет заказ или возвращает деньги.
Google отменяет или возвращает деньги за заказ.
Используя этот API, вы помогаете создать более сбалансированный и справедливый опыт для всех пользователей вашего приложения, особенно если ваше приложение представляет собой игру.
Получение доступа
Для работы с API аннулированных покупок вам необходимо разрешение на просмотр финансовой информации. Авторизация осуществляется через OAuth-клиент или сервисную учётную запись. Если вы используете сервисную учётную запись, включите разрешение «Просмотр финансовых отчётов» в этой учётной записи.
Дополнительную информацию о получении авторизованного доступа к API разработчиков Google Play см. в следующих руководствах:
- Настройка клиентов API-доступа
- Добавьте пользователей учетной записи разработчика и управляйте разрешениями
Просмотр аннулированных покупок
Используйте метод GET
для запроса списка аннулированных покупок. В запросе укажите полное имя пакета вашего приложения, например, com.google.android.apps.maps
, и токен авторизации, полученный при получении доступа к API.
GET https://www.googleapis.com/androidpublisher/v3/applications/ your_package_name/purchases/voidedpurchases?access_token=your_auth_token
Вы также можете включить в свой запрос следующие параметры, каждый из которых является необязательным:
- время начала
Время (в миллисекундах с начала эпохи Unix ) самой старой аннулированной покупки, которую вы хотите увидеть в ответе. По умолчанию
startTime
равно 30 дням назад.API может отображать только аннулированные покупки, совершённые за последние 30 дней. Более старые аннулированные покупки не включаются в ответ, независимо от значения, указанного для
startTime
.- время окончания
Время (в миллисекундах с начала эпохи Unix ) последней аннулированной покупки, которую вы хотите увидеть в ответе. По умолчанию
endTime
равен текущему времени.- maxResults
- Максимальное количество аннулированных покупок, отображаемых в каждом ответе. По умолчанию это значение равно 1000. Обратите внимание, что максимальное значение для этого параметра также равно 1000.
- токен
- Токен продолжения предыдущего ответа, позволяющий просмотреть больше результатов.
- тип
Тип аннулированных покупок, отображаемых в каждом ответе. Если установлено значение 0, будут возвращены только аннулированные покупки в приложении. Если установлено значение 1, будут возвращены как аннулированные покупки в приложении, так и аннулированные покупки по подписке. Значение по умолчанию — 0.
- включаюЧастичноеВозмещениеНаОсновеКоличества
Включать ли аннулированные покупки в частичные возвраты на основе количества, которые применимы только к покупкам с несколькими суммами. Если
true
, дополнительные аннулированные покупки могут быть возвращены сvoidedQuantity
, указывающим сумму возврата при частичном возврате на основе количества. Значение по умолчанию —false
.
Ответ представляет собой строку JSON, содержащую список аннулированных покупок. Если количество результатов превышает число, указанное в параметре запроса maxResults
, ответ включает значение nextPageToken
, которое можно передать в последующий запрос для просмотра дополнительных результатов. Первый результат в списке отображает самую старую аннулированную покупку.
{ "tokenPagination": { "nextPageToken": "next_page_token" }, "voidedPurchases": [ { "kind": "androidpublisher#voidedPurchase", "purchaseToken": "some_purchase_token", "purchaseTimeMillis": "1468825200000", "voidedTimeMillis": "1469430000000", "orderId": "some_order_id", "voidedSource": "0", "voidedReason": "4" }, { "kind": "androidpublisher#voidedPurchase", "purchaseToken": "some_other_purchase_token", "purchaseTimeMillis": "1468825100000", "voidedTimeMillis": "1470034800000", "orderId": "some_other_order_id", "voidedSource": "2", "voidedReason": "5" }, ] }
Квоты
API аннулированных покупок устанавливает следующие квоты для каждого пакета:
- 6000 запросов в день. (День начинается и заканчивается в полночь по тихоокеанскому времени.)
- 30 запросов в течение любого 30-секундного периода.
Руководство по первоначальным запросам
Во время первого запроса к API вам может потребоваться получить все доступные данные для вашего приложения. Хотя это маловероятно, этот процесс может исчерпать вашу дневную квоту. Чтобы получить данные об аннулированных покупках более безопасным и последовательным способом, следуйте этим рекомендациям:
- Используйте значение по умолчанию для параметра
maxResults
. Таким образом, если вы используете всю квоту запросов за день, вы сможете получить информацию о 6 000 000 аннулированных покупок. - Если ответ содержит значение
nextPageToken
, присвойте это значение параметруtoken
во время следующего запроса.
Лучшие практики
Используя этот API в своём приложении, помните, что существует множество причин для отмены покупки, и не существует универсального решения, подходящего во всех случаях. При разработке политик и стратегий отзыва следует учитывать интересы пользователей. Для этого можно использовать следующие рекомендации:
- Используйте этот API как один из многих элементов комплексной стратегии борьбы с нежелательным поведением. Запрет доступа к продуктам внутри приложения обычно более эффективен в сочетании с разумными ценами на покупки внутри приложения, дизайном, препятствующим нежелательному поведению, сильной пользовательской базой, культура которой отвергает такое поведение, а также отзывчивыми и эффективными каналами поддержки пользователей.
- Администрируйте политику отзыва единообразно, чтобы обеспечить справедливость для всех пользователей.
- Рассмотрите возможность создания поэтапной политики реагирования на нежелательное поведение. Например, начните с предупреждений в приложении о ранних нарушениях, а затем ужесточайте меры реагирования по мере продолжения нежелательного поведения пользователя. В крайнем случае, вы можете вообще запретить пользователю взаимодействовать с вашим приложением.
- При внедрении политики отзыва и при каждом её обновлении используйте каналы связи в вашем приложении, чтобы информировать пользователей об изменениях. Дайте пользователям время, чтобы чётко понять эти изменения, прежде чем они вступят в силу в вашем приложении.
- Будьте прозрачны для своих пользователей и сообщайте им о любых ваших действиях, например, о закрытии доступа к продукту в приложении. В идеале пользователи должны иметь возможность оспорить ваши решения, и такие споры должны рассматриваться справедливо.
- Следите за формами обратной связи и форумами сообщества, чтобы понять, что побуждает пользователей вести себя нежелательно и как они это делают. Используйте эти данные в качестве первой линии защиты.