O Google fornece validação de recibo por meio da API do desenvolvedor do Google Play , dentro da API há dois endpoints nos quais você estará mais interessado: Purchases.products: get e Purchases.subscriptions: get .
Purchases.products: get
pode ser usado para verificar uma compra de produto sem renovação automática, onde Purchases.subscriptions: get
é para verificar e verificar novamente as assinaturas de produto com renovação automática.
Para usar qualquer endpoint você deve saber o packageName
, productId
, purchaseToken
todos estes podem ser encontrados na carga útil que você recebeu na compra. Você também precisa de um access_token
que pode obter criando uma conta de serviço API do Google.
Para começar a usar uma conta de serviço, primeiro vá para a página de configurações de acesso da API do console do desenvolvedor do Google Play e clique no botão Criar novo projeto:
Agora você deve ver um novo projeto vinculado e algumas novas seções, na seção Conta de serviço, clique no botão Criar conta de serviço.
Você verá uma caixa de informações com instruções para criar sua conta de serviço. Clique no link para o Google Developers Console e uma nova guia aparecerá.
Agora clique em Criar novo ID de cliente, selecione Conta de serviço nas opções e clique em Criar ID de cliente.
Um arquivo JSON será baixado, este é o seu JSON Web Token que você usará para trocar por um, access_token
portanto, mantenha-o seguro.
Em seguida, mude as guias de volta para o console do desenvolvedor do Google play e clique em Concluído na caixa de informações. Você deve ver sua nova conta de serviço na lista. Clique em Conceder acesso ao lado do e-mail da conta de serviço.
Em seguida, em Escolha uma função para este usuário, selecione Finanças e clique em Adicionar usuário.
Agora você configurou sua conta de serviço e ela tem todos os acessos necessários para realizar as validações de recebimento. O próximo passo é trocar seu JWT por um access_token.
O access_token
expira após uma hora de troca, você precisa de algum código de servidor para lidar com isso e o Google forneceu várias bibliotecas em várias linguagens para lidar com isso (lista não exaustiva):
Não vou entrar em detalhes porque há muita documentação sobre como usar essas bibliotecas, mas mencionarei que você deseja usar o https://www.googleapis.com/auth/androidpublisher
como o escopo OAuth2, o client_email
do JWT como o issuer
e a chave pública que você pode obter no private_key
e a frase secreta notasecret
será usada para o signing_key
.
Assim que tiver o, access_token
você está pronto para ir (pelo menos na próxima hora, momento em que você vai querer solicitar um novo seguindo o mesmo processo no parágrafo acima).
Para verificar o status de uma compra de consumível (sem renovação automática), faça uma get
solicitação http para:https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token
Se você receber um código de resposta 200 http, tudo correu conforme planejado e sua compra foi válida. Um 404 significa que seu token é inválido, portanto, a compra provavelmente foi uma tentativa de fraude. Um 401 significará que seu token de acesso é inválido e um 403 significará que sua conta de serviço não tem acesso suficiente. Verifique se você ativou Finanças para a conta de acesso no console do desenvolvedor do Google Play.
A resposta de um 200 será semelhante a esta:
{
"kind": "androidpublisher#productPurchase",
"purchaseTimeMillis": long,
"purchaseState": integer,
"consumptionState": integer,
"developerPayload": string
}
Para obter uma explicação de cada propriedade, consulte https://developers.google.com/android-publisher/api-ref/purchases/products .
As assinaturas são semelhantes, mas o endpoint se parece com isto:
https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token
E a resposta deve conter estas propriedades:
{
"kind": "androidpublisher#subscriptionPurchase",
"startTimeMillis": long,
"expiryTimeMillis": long,
"autoRenewing": boolean
}
Consulte https://developers.google.com/android-publisher/api-ref/purchases/subscriptions para as descrições das propriedades e observe que startTimeMillis
e expiryTimeMillis
estarão sujeitos a alterações dependendo da duração da assinatura.
Boa validação!