Estou usando o google wallet como meu gateway de pagamento, depois de comprar o produto google, dando-me uma resposta abaixo que
{
"orderId":"12999763169054705758.1371079406387615",
"packageName":"com.example.app",
"productId":"exampleSku",
"purchaseTime":1345678900000,
"purchaseState":0,
"developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
"purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
}
Estou tentando usar a validação de recibo que o Google Play recentemente introduziu. No console do Google Developer, criei a chave do certificado por conta de serviço na permissão. Mas estou confuso sobre como usar a validação de recibo depois de comprar um produto na Google Play-store.
Então, alguém pode me ajudar como fazer a validação do Recibo de InApp
Compra.
android
in-app-purchase
android-pay
Binil Surendran
fonte
fonte
Respostas:
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, ondePurchases.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 umaccess_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, oclient_email
do JWT como oissuer
e a chave pública que você pode obter noprivate_key
e a frase secretanotasecret
será usada para osigning_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
eexpiryTimeMillis
estarão sujeitos a alterações dependendo da duração da assinatura.Boa validação!
fonte
A resposta de Marc é excelente. Acrescentarei apenas que a biblioteca cliente da API do desenvolvedor do Google Play para Java torna muito mais simples a conexão de seu servidor aos servidores do Google Play. A biblioteca lida automaticamente com a atualização do token de autenticação e também fornece uma API segura de tipos para que você não precise se preocupar com URLs.
Veja como você configura o
Publisher
singleton:httpTransport = GoogleNetHttpTransport.newTrustedTransport(); jsonFactory = JacksonFactory.getDefaultInstance(); credential = GoogleCredential.fromStream(getClass().getResourceAsStream("/path/to/your/key.json")).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER)); publisher = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential).setApplicationName(APP_NAME).build();
O código a seguir consulta a compra de um produto:
ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute(); Integer purchaseState = product.getPurchaseState(); product.getPurchaseTimeMillis(); product.getConsumptionState(); product.getDeveloperPayload();
Você também pode consultar assinaturas:
SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute(); sub.getAutoRenewing(); sub.getCancelReason(); ...
fonte
APP_NAME = APP_PACKAGE_NAME
.getClass().getResourceAsStream(...
usarnew FileInputStream(...
.credential.refreshToken();
entre obter a credencial e o editor.@marc-greenstock forneceu uma ótima resposta, no entanto, há algo muito importante sobre a validação de recibos usando a API de desenvolvedor Android do Google Play.
Se você tiver problemas com o uso dessa API e adicionou seu produto no aplicativo ANTES de conceder permissão ou vinculá-lo à sua conta de serviço, será necessário abrir "Produtos no aplicativo" e realizar algumas atualizações. Você pode, por exemplo, editar a descrição do seu produto e salvar. Você deve obter permissão imediatamente.
Passei algumas horas pensando o que fiz de errado ...
fonte
Essa resposta é excelente. Outro problema que encontramos ao seguir a orientação foi que a conta do serviço não apareceu no Google Play Console. Acabamos encontrando esta solução para ajudar: A conta de serviço não aparece no Google Console após a criação
Basicamente, vá para IAM no Google API Console e adicione a nova conta de serviço, então ela aparecerá no Google Play Console. captura de tela
fonte
Eu enfrentei um problema semelhante, o problema está nas configurações que fazemos no projeto de desenvolvedor do Google.
Consulte create-play-service-credentials para configurações. Use a mesma conta principal com a qual você criou seus produtos no aplicativo.
Certifique-se de remover o anterior.
Link para um projeto de desenvolvedor do Google Sua conta de desenvolvedor do Play precisa estar vinculada a um projeto de desenvolvedor do Google.
1a. Abra os menus Configurações> Conta do desenvolvedor e selecione acesso à API
1b. Selecione Link para conectar sua conta do Play a um projeto do Google Developer
1c. Concordo com os termos e condições
2. Crie uma conta de serviço Em seguida, precisamos criar uma conta de serviço. Isso é feito no Console de API do Google.
2a. Selecione Criar conta de serviço
2b. Criar credenciais de chave de conta de serviço
2c. Insira os detalhes da conta de serviço
2d. Baixe sua credencial JSON:
3. Conceda acesso
3a. No Play Console, selecione Conceder acesso na conta de serviço recém-criada
3b. Conceda as seguintes permissões:
Depois disso, aguarde 48 horas para permitir que o Google propague todos os direitos de acesso para APIs.
fonte