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") } 
  • Cómo utilizar la administración de dependencias granular de Google Play Services 6.5
  • Android: Google reproduce los servicios de juegos error de conexión (java.lang.IllegalStateException: GoogleApiClient debe estar conectado.)
  • Servicios de Google Play en el emulador, implementación del botón de inicio de sesión de Google Plus, etc.
  • Google Play no muestra el número correcto de descargas para mi aplicación
  • Los archivos múltiples dex definen Lcom / google / android / gms / internal / zzau
  • Llamada incorrecta: paquete especificado com.google.android.play.games bajo uid 10238 pero es realmente 10062
  • SetVisibleActivities undefined
  • La importación com.google.android.gms.location.LocationClient no se puede resolver después de formatear el equipo
  • Google Play Games Services Leaderboard API, no puede ver las puntuaciones de otros jugadores
  • Obtención de un token de cuenta de Google de GoogleApiClient sin el permiso de GET_ACCOUNTS
  • Accede a las compras en la aplicación del perfil principal en el perfil restringido de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.