Google Play Developer API - недопустимое значение 400 - InAppPurchases

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

Мой код следует этому руководству, которое очень просто. Тем не менее, я не могу получить соответствующую ошибку для моего запроса. Вот как я строю свой AndroidPublisher:

val credential = GoogleCredential.fromStream(FileInputStream(
        "/path/to/json"
)).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER))

androidPublisher = AndroidPublisher.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(packageName)
        .build()

Где JSON генерируется из консоли разработчика в разделе "Учетные записи служб". Вот как я делаю свой запрос:

androidPublisher.purchases().subscriptions().get(packageName, "valid-sku", "invalid-token").execute()

Мой идентификатор подписки действителен, но мой токен недействителен. Я ожидаю ошибку, такую ​​как "неверный токен" в ответе. Однако то, что я получаю, это:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid Value",
    "reason" : "invalid"
  } ],
  "message" : "Invalid Value"
}

Это общая ошибка из-за неверного токена или проблема с аутентификацией? Если это проблема аутентификации, как мне ее решить? Если это неверный токен, как мне узнать?

Еще немного информации:

  • Я получаю ту же ошибку при попытке сделать этот вызов также из API Explorer (на этот раз, используя идентификатор клиента и ключ API вместо служебной учетной записи).
  • Я не делегировал общедоменный доступ к учетной записи службы. Должен ли я по какой-то причине?
  • Я могу успешно делать другие вызовы API, такие как inappproducts.list

5 ответов

Решение

Итак, причина, по которой это произошло, была только потому, что purchaseToken Я использовал было неправильно.

Я не ожидал, что это будет причиной, так как я думал, что в случае неверного токена я получу ошибку "неверный токен" (или что-то подобное). Как выясняется, ответы Google довольно противоречивы (404 также может быть дан за недействительный токен).

Из моего опыта, если у вас есть HTTP 400 ошибка с Invalid Value тогда эта покупка или подписка является мошенничеством.

Вы можете проверить Order Id часть этих покупок. Вероятно, в формате XXXXXXXXXXXX.XXXXXXXXXXXX что неправильно и должно быть GPA.XXXX.XXXXX.XXXXX.XXX

  • Я действительно не считаю номер символа X Я просто добавил, чтобы показать логику.

В моем случае проблема заключалась в том, что я звонил:

purchases.products.get

Вместо того:

purchases.subscriptions.get

Почесал голову несколько часов, ВСЕ мои параметры были правильными, а потом хорошо .. Я понял, что лаяю не на то дерево (конечную точку)

      https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}

не это

      https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}

/ покупки / подписки / .. vs / покупки / продукты / ..

Для всех, кто столкнулся с этой проблемой, 99% из вас должны опубликовать приложение для внутренних тестировщиков.

Следуйте этому руководству: https://support.google.com/googleplay/android-developer/answer/6062777?hl=en

Другие вопросы по тегам