android - para - factura sencilla app
Android: validaciĆ³n del recibo de compra de inApp google play (3)
Esta respuesta es excelente. Otro problema que tuvimos al seguir las instrucciones fue que la cuenta de servicio no se mostraba en la Consola de Google Play. Terminamos encontrando esta solución para ayudar: la cuenta de servicio no aparece en Google Console después de la creación
Básicamente, vaya a IAM en Google API Console y agregue la nueva cuenta de servicio, luego aparecerá en Google Play Console. screenshot
Estoy usando Google Wallet para mi pasarela de pago, después de comprar el producto google, dándome 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 la validación de recibo que Google Play acaba de presentar. 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 la validación de recibos después de comprar un producto en la tienda Google Play.
Entonces, ¿alguien puede ayudarme a hacer la
validación
de
recibo
de
InApp
Purchase?
Google proporciona validación de recibos a través de la API de desarrollador de Google Play , dentro de la API hay dos puntos finales en los que estará más interesado: Compras.productos: obtener y Suscripciones compras: obtener .
Purchases.products: get
se puede utilizar para verificar una compra de 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 finales, debe conocer
packageName
,
productId
,
packageName
, todos estos se pueden encontrar en la carga que recibió en la compra.
También necesita un
access_token
que puede obtener creando 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 a la API de la consola de Google Play Developer y haga clic en el botón Crear nuevo proyecto:
Ahora debería ver un nuevo proyecto vinculado y algunas secciones nuevas, en la sección Cuenta de servicio, haga clic en el botón Crear 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 aparecerá una nueva pestaña.
Ahora haga clic en Crear nueva ID de cliente, seleccione Cuenta de servicio de las opciones y haga clic en Crear ID de cliente.
Se descargará un archivo JSON, este es su token web JSON que usará para intercambiar por un
access_token
así que manténgalo seguro.
A continuación, cambie las pestañas 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 Conceder acceso al lado del correo electrónico de la cuenta de servicio.
A continuación, en Elegir un rol para este usuario, seleccione Finanzas y haga clic en Agregar usuario.
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.
access_token
caduca después de una hora de intercambio, por lo que necesita un código de servidor para manejar esto y Google ha proporcionado varias bibliotecas en muchos idiomas para manejar esto (la lista no es exhaustiva):
- Ruby: https://github.com/google/google-api-ruby-client
- Node.js: https://github.com/google/google-api-nodejs-client
- Java: https://github.com/google/google-api-java-client
- Python: https://github.com/google/google-api-python-client
No entraré en detalles porque hay mucha documentación sobre cómo usar estas bibliotecas, pero mencionaré que desea usar
https://www.googleapis.com/auth/androidpublisher
como el alcance OAuth2, el
client_email
de el JWT como
issuer
y la clave pública que puede obtener de
private_key
y la frase de contraseña
notasecret
se utilizarán para la
signing_key
.
Una vez que tenga
access_token
,
access_token
listo (al menos durante la próxima hora, momento en el que deberá solicitar uno nuevo siguiendo el mismo proceso en el párrafo anterior).
Para verificar el estado de una compra consumible (no de renovación automática), haga una solicitud de solicitud http a:
https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token
Si obtiene un código de respuesta de 200 http, todo salió según lo planeado y su compra fue válida. Un 404 significará que su token no es válido, por lo que la compra probablemente fue un intento 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 Finanzas 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 sujetas 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 cliente API de desarrollador de Google Play para Java lo hace mucho más simple 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 escribir para que no tenga que andar con URL.
Así es como configura el singleton
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 la compra de un producto:
ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute();
Integer purchaseState = product.getPurchaseState();
product.getPurchaseTimeMillis();
product.getConsumptionState();
product.getDeveloperPayload();
De manera similar, puede consultar suscripciones:
SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute();
sub.getAutoRenewing();
sub.getCancelReason();
...