REST Resource: purchases.subscriptions

Recurso: SubscriptionPurchase

Um recurso SubscriptionPurchase indica o status da compra de assinatura de um usuário.

Representação JSON
{
  "kind": string,
  "startTimeMillis": string,
  "expiryTimeMillis": string,
  "autoResumeTimeMillis": string,
  "autoRenewing": boolean,
  "priceCurrencyCode": string,
  "priceAmountMicros": string,
  "introductoryPriceInfo": {
    object (IntroductoryPriceInfo)
  },
  "countryCode": string,
  "developerPayload": string,
  "paymentState": integer,
  "cancelReason": integer,
  "userCancellationTimeMillis": string,
  "cancelSurveyResult": {
    object (SubscriptionCancelSurveyResult)
  },
  "orderId": string,
  "linkedPurchaseToken": string,
  "purchaseType": integer,
  "priceChange": {
    object (SubscriptionPriceChange)
  },
  "profileName": string,
  "emailAddress": string,
  "givenName": string,
  "familyName": string,
  "profileId": string,
  "acknowledgementState": integer,
  "externalAccountId": string,
  "promotionType": integer,
  "promotionCode": string,
  "obfuscatedExternalAccountId": string,
  "obfuscatedExternalProfileId": string
}
Campos
kind

string

Esse tipo representa um objeto subscriptionPurchase no serviço androidpublisher.

startTimeMillis

string (int64 format)

O momento em que a assinatura foi concedida, em milissegundos desde a época.

expiryTimeMillis

string (int64 format)

O momento em que a assinatura vai expirar, em milissegundos desde a época.

autoResumeTimeMillis

string (int64 format)

O momento em que a assinatura será retomada automaticamente, em milissegundos desde a época. Esse campo só estará presente se o usuário solicitou a pausa da assinatura.

autoRenewing

boolean

Indica se a assinatura será renovada automaticamente quando alcançar o prazo de validade atual.

priceCurrencyCode

string

Código da moeda ISO 4217 para o preço da assinatura. Por exemplo, se o preço for especificado em libras esterlinas, o campo "priceCurrencyCode" será "GBP".

priceAmountMicros

string (int64 format)

É o preço da assinatura. Ele não inclui os tributos dependendo do país. Ele inclui os tributos dependendo do país. O preço é expresso em microunidades, sendo que 1 milhão de microunidades representa uma unidade da moeda. Por exemplo, se o preço da assinatura for € 1,99, o campo "priceAmountMicros" será "1990000".

introductoryPriceInfo

object (IntroductoryPriceInfo)

São as informações de preço inicial da assinatura. Esse campo só estará presente quando a assinatura for comprada com um preço inicial.

Esse campo não indica se a assinatura está atualmente no período de preço inicial.

countryCode

string

Código de país/região de faturamento do usuário no formato ISO 3166-1 alpha-2, no momento em que a assinatura foi concedida.

developerPayload

string

Uma string especificada pelo desenvolvedor que contém informações complementares sobre um pedido.

paymentState

integer

O estado do pagamento da assinatura. Os valores possíveis são: 0. Pagamento pendente, 1. Pagamento recebido, 2. Teste sem custo financeiro, 3. Upgrade/downgrade adiado pendente.

Esse campo não estará presente para assinaturas canceladas e expiradas.

cancelReason

integer

O motivo para o cancelamento ou a não renovação automática da assinatura. Os valores possíveis são: 0. O usuário cancelou a assinatura, 1. A assinatura foi cancelada pelo sistema, por exemplo, por causa de um problema de faturamento, 2. A assinatura foi substituída por uma nova, 3. A assinatura foi cancelada pelo desenvolvedor

userCancellationTimeMillis

string (int64 format)

Quando a assinatura foi cancelada pelo usuário, em milissegundos, desde o início da época. Só estará presente se o campo "cancelReason" for 0.

cancelSurveyResult

object (SubscriptionCancelSurveyResult)

Informações enviadas pelo usuário ao completar o fluxo de cancelamento de assinatura (a pesquisa sobre o motivo do cancelamento).

orderId

string

O ID do último pedido recorrente associado à compra da assinatura. Se a assinatura foi cancelada devido a um pagamento recusado, esse campo será o ID do pedido correspondente.

linkedPurchaseToken

string

O token da compra original se a assinatura for um dos tipos a seguir: 0. Reinscrição de uma assinatura cancelada, mas ativa, 1. Fazer upgrade/downgrade de uma assinatura anterior

Por exemplo: um usuário se inscreve originalmente e você recebe o token de compra X. Depois, esse usuário cancela e passa pelo fluxo de reinscrição (antes de a assinatura expirar) e você recebe o token de compra Y. Por fim, o usuário faz upgrade da assinatura e você recebe o token de compra Z. Se você chamar a API com o token de compra Z, esse campo será definido como "Y". Se você chamar a API com o token de compra Y, esse campo será definido como "X". Se você chamar a API com o token de compra X, esse campo não será definido.

purchaseType

integer

O tipo de compra da assinatura. Este campo só é definido se a compra não foi feita usando o fluxo de faturamento no app padrão. Os valores possíveis são: 0. Teste (compra feita com uma conta de teste de licença), 1. Promoção (compra feita com um código promocional).

priceChange

object (SubscriptionPriceChange)

São as últimas informações de mudança de preço disponíveis. Esse campo só está presente quando uma mudança de preço da assinatura ainda será aplicada.

Depois que a assinatura for renovada com o novo preço ou for cancelada, não será retornada nenhuma informação de mudança de preço.

profileName

string

O nome do perfil do usuário quando a assinatura foi comprada. Esse campo só está presente para compras feitas com o recurso Assine com o Google.

emailAddress

string

O endereço de e-mail do usuário quando a assinatura foi comprada. Esse campo só está presente para compras feitas com o recurso Assine com o Google.

givenName

string

O nome do usuário quando a assinatura foi comprada. Esse campo só está presente para compras feitas com o recurso Assine com o Google.

familyName

string

O sobrenome do usuário quando a assinatura foi comprada. Esse campo só está presente para compras feitas com o recurso Assine com o Google.

profileId

string

O ID do perfil do Google do usuário quando a assinatura foi comprada. Esse campo só está presente para compras feitas com o recurso Assine com o Google.

acknowledgementState

integer

O estado de confirmação do produto por assinatura. Os valores possíveis são: 0. Ainda não foi confirmado; 1. Reconhecido

externalAccountId

string

Identificador da conta de usuário no serviço de terceiros. Presente apenas se a vinculação de contas tiver ocorrido como parte de um fluxo de compra da assinatura.

promotionType

integer

O tipo de promoção aplicado a essa compra. Esse campo só é definido se uma promoção é usada durante a compra da assinatura. Os valores possíveis são: 0. Código único, 1. Código personalizado

promotionCode

string

O código promocional aplicado a essa compra. Esse campo só é definido se uma promoção de código personalizado é usada durante a compra da assinatura.

obfuscatedExternalAccountId

string

Uma versão ofuscada do ID que é exclusivamente associado com a conta do usuário no seu app. Presente nas seguintes compras: * Se a vinculação de contas tiver ocorrido como parte do fluxo de compra da assinatura. * Foi especificada usando https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid quando a compra foi feita.

obfuscatedExternalProfileId

string

Uma versão ofuscada do ID que é exclusivamente associado ao perfil do usuário no seu app. Presente apenas se especificada usando https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid quando a compra foi feita.

IntroductoryPriceInfo

Contém as informações de preço inicial para uma assinatura.

Representação JSON
{
  "introductoryPriceCurrencyCode": string,
  "introductoryPriceAmountMicros": string,
  "introductoryPricePeriod": string,
  "introductoryPriceCycles": integer
}
Campos
introductoryPriceCurrencyCode

string

Código da moeda ISO 4217 para o preço inicial da assinatura. Por exemplo, se o preço for especificado em libras esterlinas, o campo "priceCurrencyCode" será "GBP".

introductoryPriceAmountMicros

string (int64 format)

Preço inicial da assinatura, sem os tributos. A moeda é igual a priceCurrencyCode. O preço é expresso em microunidades, sendo que 1 milhão de microunidades representa uma unidade da moeda. Por exemplo, se o preço da assinatura for € 1,99, o campo "priceAmountMicros" será "1990000".

introductoryPricePeriod

string

Período do preço inicial, especificado no formato ISO 8601. Os valores comuns são, sem limitação, P1W (uma semana), P1M (um mês), P3M (três meses), P6M (seis meses) e P1Y (um ano).

introductoryPriceCycles

integer

O número de períodos de faturamento para oferecer o preço inicial.

SubscriptionCancelSurveyResult

Informações enviadas pelo usuário ao completar o fluxo de cancelamento de assinatura (a pesquisa sobre o motivo do cancelamento).

Representação JSON
{
  "cancelSurveyReason": integer,
  "userInputCancelReason": string
}
Campos
cancelSurveyReason

integer

O motivo de cancelamento que o usuário escolheu na pesquisa. Os valores possíveis são: 0. Outro, 1. Não uso o serviço com frequência, 2. Problemas técnicos, 3. Razões financeiras, 4. Descobri um app melhor

userInputCancelReason

string

O motivo do cancelamento personalizado inserido pelo usuário. Só estará presente se o campo "cancelReason" for 0.

SubscriptionPriceChange

Contém as informações de mudança de preço na assinatura que podem ser usadas para controlar a jornada do usuário no app. Isso pode ser feito, por exemplo, buscando a confirmação do usuário ou personalizando a experiência para uma conversão bem-sucedida.

Representação JSON
{
  "newPrice": {
    object (Price)
  },
  "state": integer
}
Campos
newPrice

object (Price)

O novo preço da assinatura na renovação se a mudança for aceita pelo usuário.

state

integer

O estado atual da mudança de preço. Os valores possíveis são: 0. Pendente: aguardando o usuário confirmar a mudança de preço. Nesse estado, você pode buscar a confirmação do usuário usando a API no app. 1. Aceito: a mudança de preço foi aceita para a renovação da assinatura, a menos que seja cancelada. Ela vai entrar em vigor em uma data futura quando a assinatura for renovada. Essa mudança pode não ocorrer na próxima renovação.

Métodos

acknowledge

Confirma a compra de uma assinatura.

cancel

Cancela a compra de assinatura de um usuário.

defer

Adia a compra de assinatura feita por um usuário até um prazo de validade futuro especificado.

get
(deprecated)

Descontinuado: use purchases.subscriptionsv2.get.

refund
(deprecated)

Descontinuado: use "orders.refund".

revoke
(deprecated)

Descontinuado: use purchases.subscriptionsv2.revoke.

Códigos de erro

As operações desse recurso retornam os seguintes códigos de erro HTTP:

Código do erro Motivo Descrição Resolução
400 / 410 subscriptionExpired A assinatura expirou e a operação solicitada não pode ser realizada. Confira o prazo de validade da assinatura. Esta operação não é permitida em assinaturas expiradas.
400 subscriptionInvalidArgument Um argumento inválido foi fornecido na solicitação de assinatura. Leia a documentação da API e verifique se todos os campos obrigatórios foram fornecidos e formatados corretamente.
400 invalidPurchaseState A compra não está em um estado válido para realizar a operação solicitada. Por exemplo, você pode estar tentando confirmar uma compra já consumida ou cancelar uma assinatura inativa. Verifique o estado atual do recurso usando a API Get correspondente antes de tentar a operação. Verifique se o recurso está em um estado adequado para a ação.
400 invalidValue Um valor inválido foi fornecido na solicitação. Geralmente, isso é retornado para um token de compra malformado ou inválido. Corrija o valor do campo inválido no corpo ou nos parâmetros da solicitação com base na referência da API.
400 prepaidSubscriptionNotSupported A operação solicitada não é compatível com assinaturas pré-pagas. Verifique se a operação é aplicável ao tipo de assinatura. Esse erro é específico de métodos como "Cancel", "Defer", "Refund" ou "Revoke".
400 productNotOwnedByUser O token de compra fornecido é válido, mas o usuário não tem o produto. Isso pode acontecer se a compra for reembolsada, revogada ou expirar antes da confirmação. Verifique o estado atual do recurso usando a API Get correspondente antes de tentar a operação. Verifique se o recurso está em um estado adequado para a ação.
400 purchaseTokenMismatch O token de compra fornecido não corresponde à compra, ao nome do pacote, ao ID da assinatura ou ao ID do produto. Verifique se todos os detalhes na solicitação estão corretos e correspondem entre si.
400 required Um campo ou parâmetro obrigatório está faltando na solicitação. Consulte a documentação da API para garantir que todos os campos e parâmetros obrigatórios estejam incluídos.
400 unsupportedIabType A operação não é compatível com o tipo de faturamento em app especificado. Verifique se o método da API é compatível com o tipo de item que está sendo gerenciado.
403 userInsufficientPermission O usuário não tem permissão suficiente para realizar a operação solicitada. Confira se o usuário autenticado tem as permissões necessárias no Google Play Console. Consulte Como usar uma conta de serviço para mais detalhes.
404 notFound Não foi possível encontrar o recurso solicitado. Verifique se os identificadores (por exemplo, token de compra, nome do pacote, ID do produto, ID da assinatura) estão corretos.
409 concurrentUpdate Houve uma tentativa de atualizar um objeto que está sendo atualizado simultaneamente. Tente de novo com uma espera exponencial. Evite modificações simultâneas no mesmo recurso.
410 purchaseTokenNoLongerValid O token de compra é permanentemente inválido porque a conta de usuário associada foi excluída ou o registro de compra não existe mais. Interrompa o uso deste token de compra.
410 subscriptionNoLongerAvailable A compra da assinatura não está mais disponível para consulta porque expirou há muito tempo. Esse erro indica que a assinatura expirou há mais de 60 dias. Não consulte mais essas assinaturas.
5xx Generic error Erro genérico no servidor do Google Play. Tente fazer a solicitação novamente.

Se o problema persistir, entre em contato com seu gerente de contas do Google Play ou envie uma solicitação de suporte. Confira o Painel de status do Google Play para saber se há falhas conhecidas.