Compruebe el estado de compra de Android pero devuelva el token de compra no se encontró

Hice referencia a google play android api para comprobar el estado de compra y consumo de un elemento en la aplicación. Para algunos pedidos, puedo obtener el resultado correcto, pero algunos devuelven el error como a continuación:

error: { errors: [ { domain: "global", reason: "purchaseTokenNotFound", message: "The purchase token was not found.", locationType: "parameter", location: "token" } ], code: 404, message: "The purchase token was not found." } 

El token de compra es proporcionado por google, ¿se puede falsificar?

Encontré si cancelo la orden de google, después comprobar el estado de la compra, él volverá el símbolo de la compra no fue encontrado. Si no, conseguiré el estado correcto de la compra.

Espero que alguien pueda ayudar.

Si está vendiendo el mismo producto INAPP al mismo usuario muliple veces en un período corto, entonces es muy probable que todos los tokens de acceso excepto la última compra devolverán un código 404 .

Por ejemplo:

[email protected] fue a su aplicación y compró com.example.test.product unas cuantas veces, usted probaly aviso dentro de sus registros (o cuenta de comerciante de Google Wallet) que es el mismo usuario que compra el producto.

Cuando vaya a comprobar la última compra de este usuario, es probable que aparezca lo siguiente

 { kind: "androidpublisher#inappPurchase", purchaseTime: "1409823171827", purchaseState: "0", consumptionState: "1", developerPayload: "My Product | Ref | 1409823162466" } 

Y sin embargo si usted fuera a comprobar sus fichas anteriores, entonces es muy probable que sus compras volverán 404 !

Yo había leído en algún lugar (no recuerdo dónde) que el símbolo de compra creado para cada compra se basa básicamente en el producto inapp y el usuario de google. Por lo tanto, es muy probable que cada compra "destruya" cualquier token de compra anterior creado para el mismo usuario.

Espero que esta explicación ayuda. Estoy constantemente teniendo este problema todos los días cuando mi servidor está tratando de conectarse a la API de Google y comprobar las transacciones. Tal vez un día alguien va a leer esto y proporcionar una solución 🙂

Los documentos son engañosos. No es necesario utilizar esta API para verificar las compras.

La aplicación para móviles tiene INAPP_PURCHASE_DATA e INAPP_DATA_SIGNATURE del método getBuyIntent .

Puede verificar la compra con la firma y su clave pública .

https://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent

Puedes encontrar la clave pública en la Google Play Developer Console -> YOUR_APP -> service and API

 package main import ( "crypto" "crypto/rsa" "crypto/sha1" "crypto/x509" "encoding/base64" "encoding/pem" "fmt" ) //replace const below with your own. const ( pubKeyPEM=`-----BEGIN PUBLIC KEY----- Some thing like this -----END PUBLIC KEY-----` data = `purchase data from getBuyIntent API` sign = `purchase data signature from getBuyIntent API` ) func Panic(err error) { if err != nil { panic(err) } } func main() { PEMBlock, _ := pem.Decode([]byte(pubKeyPEM)) if PEMBlock == nil { Panic(fmt.Errorf("Could not parse Public Key PEM")) } if PEMBlock.Type != "PUBLIC KEY" { Panic(fmt.Errorf("Found wrong key type")) } pubkey, err := x509.ParsePKIXPublicKey(PEMBlock.Bytes) if err != nil { Panic(err) } // compute the sha1 h := sha1.New() h.Write([]byte(data)) // decode b64 signature signature, err := base64.StdEncoding.DecodeString(sign) Panic(err) // Verify err = rsa.VerifyPKCS1v15(pubkey.(*rsa.PublicKey), crypto.SHA1, h.Sum(nil), signature) Panic(err) // It verified! fmt.Println("OK") } 
  • Emulador de Android: esta aplicación no se ejecutará sin los servicios de Google Play
  • Accede a las compras en la aplicación del perfil principal en el perfil restringido de Android
  • Google Maps Lite Mode causa jank en RecyclerView
  • Inicio de sesión de Android con Google Plus en el primer inicio de sesión
  • Redireccionar usuario a la página de suscripción en la tienda de reproducción
  • NoClassDefFoundError en la biblioteca Google Play Services V2
  • Error: (23, 13) No se pudo resolver: com.google.android.gms: play-services: 11.2.0 "Instalar repositorio y sincronizar proyecto" la dosis no funciona
  • No se pudo encontrar com.google.android.gms: play-services: 8.4.0
  • BaseGameUtils GoogleApiClient.ApiOptions no se puede resolver con un tipo
  • Mi aplicación es compatible en 2.3.3, cómo hacerlo compatible
  • Cómo mostrar el diálogo de configuración de ubicación en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.