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.

2 Solutions collect form web for “Compruebe el estado de compra de Android pero devuelva el token de compra no se encontró”

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:

John@example.com 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") } 
  • Encontrado com.google.android.gms: play-services: 8.4.0, pero la versión 8.3.0 es necesaria para el plugin google-services
  • MapView - Android
  • Cómo eliminar iconos no utilizados de Google+ importados de la biblioteca de Google Play Services
  • Cómo actualizar los servicios de Google Play en el emulador en Android Studio
  • Cómo cambiar el idioma Google Map V2 android
  • Falta de servicios de Google Play en el Administrador de SDK
  • ANR con TagManagerService
  • AdvertisingIdClient.getAdvertisingIdInfo (contexto) es thworing NoClassDefFoundError
  • Reconocimiento de actividades de Google Play Services - ¿Uso de la batería?
  • No se pudo encontrar com.google.android.gms: play-services-analytics: 8.1.0
  • Inicio de sesión de Android con Google Plus en el primer inicio de sesión
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.