Android: validación de recibo de compra en Internet google play

Estoy usando la billetera de Google para mi pasarela de pago, después de comprar el producto google, que me da una respuesta a continuación que

{ "orderId":"12999763169054705758.1371079406387615", "packageName":"com.example.app", "productId":"exampleSku", "purchaseTime":1345678900000, "purchaseState":0, "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ", "purchaseToken":"rojeslcdyyiapnqcynkjyyjh" } 

Estoy tratando de hacer uso de Validación de recibo que google play recientemente presentó. En la Consola de Google Developer, hice la clave de certificado por Cuenta de servicio en el Permiso. Pero estoy confundido sobre cómo hacer uso de Validación de Recibos después de comprar un Producto de Google Play-store.

Entonces, ¿alguien puede ayudarme a cómo hacer la validación del InApp compra de InApp ?

Google proporciona validación de recibos a través de la API de Google Play para desarrolladores , dentro de la API hay dos puntos finales que le interesarán más: Compras.productos: obtener y Compras . Suscripciones: obtener .

Purchases.products: get se puede usar para verificar la compra de un producto que no se renueva automáticamente, donde Purchases.subscriptions: get es para verificar y volver a verificar las suscripciones de productos de renovación automática.

Para usar cualquiera de los puntos extremos, debe conocer el packageName , productId , purchaseToken , todos estos se pueden encontrar en la carga que recibió en la compra. También necesita un access_token que puede obtener al crear una cuenta de servicio API de Google.

Para comenzar con una cuenta de servicio, primero vaya a la página de configuración de acceso de la API de Google Play Developer Console y haga clic en el botón Crear nuevo proyecto:

Crear un nuevo proyecto de Google API

Ahora debería ver un nuevo proyecto vinculado y algunas secciones nuevas, en la sección de la cuenta de servicio, haga clic en el botón Crear cuenta de servicio.

Crea una nueva cuenta de servicio

Se le presentará un cuadro de información con instrucciones para crear su cuenta de servicio. Haga clic en el enlace a Google Developers Console y se generará una nueva pestaña.

Abra Google Developers Console

Ahora haga clic en Crear nueva ID de cliente, seleccione Cuenta de servicio en las opciones y haga clic en Crear ID de cliente.

Crea una nueva ID de cliente

Se descargará un archivo JSON, este es su token web JSON que usará para intercambiar por access_token así que manténgalo seguro.

A continuación, cambie las tabs a la consola de Google Play Developer y haga clic en Listo en el cuadro de información. Debería ver su nueva cuenta de servicio en la lista. Haga clic en Otorgar acceso junto al correo electrónico de la cuenta de servicio.

Autorizará el acceso

A continuación, debajo de Elija un rol para este usuario, seleccione Finanzas y haga clic en Agregar usuario.

Establezca el rol para Finanzas

Ahora ha configurado su cuenta de servicio y tiene todo el acceso necesario para realizar validaciones de recibos. El siguiente paso es intercambiar su JWT por un access_token.

El access_token caduca después de una hora de intercambio por lo que necesita algún código de servidor para manejar esto y Google ha proporcionado varias bibliotecas en muchos idiomas para manejar esto (lista no exhaustiva):

No entraré en detalles porque hay mucha documentación sobre cómo usar estas bibliotecas, pero mencionaré que desea utilizar el https://www.googleapis.com/auth/androidpublisher como el scope de OAuth2, el client_email de el JWT como el issuer y la clave pública que puede obtener de private_key y la frase de contraseña notasecret se usará para la signing_key .

Una vez que tenga access_token , access_token listo (al menos durante la próxima hora y en ese momento querrá solicitar uno nuevo siguiendo el mismo proceso en el párrafo anterior).

Para verificar el estado de una compra consumible (que no se renueva automáticamente), realice una solicitud de get http a: https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token

Si obtienes un código de respuesta http de 200, todo salió según lo planeado y tu compra fue válida. Un 404 significará que su token no es válido, por lo que la compra probablemente fue un bash de fraude. Un 401 significará que su token de acceso no es válido y un 403 significará que su cuenta de servicio no tiene acceso suficiente, verifique que haya habilitado Finance para la cuenta de acceso en la consola de Google Play Developer.

La respuesta de un 200 será similar a esto:

 { "kind": "androidpublisher#productPurchase", "purchaseTimeMillis": long, "purchaseState": integer, "consumptionState": integer, "developerPayload": string } 

Para obtener una explicación de cada propiedad, consulte https://developers.google.com/android-publisher/api-ref/purchases/products .

Las suscripciones son similares, sin embargo, el punto final se ve así:

https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token

Y la respuesta debe contener estas propiedades:

 { "kind": "androidpublisher#subscriptionPurchase", "startTimeMillis": long, "expiryTimeMillis": long, "autoRenewing": boolean } 

Consulte https://developers.google.com/android-publisher/api-ref/purchases/subscriptions para ver las descripciones de las propiedades y tenga en cuenta que startTimeMillis y expiryTimeMillis estarán sujetos a cambios dependiendo de la duración de la suscripción.

¡Feliz validación!

La respuesta de Marc es excelente. Solo agregaré que la Biblioteca de clientes de la API de Google Play para desarrolladores lo simplifica mucho más cuando se conecta desde su servidor a los servidores de Google Play. La biblioteca maneja automáticamente la actualización del token de autenticación y también proporciona una API segura para que no tenga que perder el tiempo con las URL.

Así es cómo configura el singleton de Publisher :

 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(); 

El siguiente código consulta una compra de producto:

 ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute(); Integer purchaseState = product.getPurchaseState(); product.getPurchaseTimeMillis(); product.getConsumptionState(); product.getDeveloperPayload(); 

También puede consultar suscripciones:

 SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute(); sub.getAutoRenewing(); sub.getCancelReason(); ...