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?
- Anular el registro de un dispositivo de GCM mediante la identificación de registro en Android
- Google Awareness API v9.6 está ausente
- No se puede crear APK con 'com.google.android.gms: play-services: 9.4.0'
- ¿Por qué se agregan automáticamente los permisos a mi AndroidManifest cuando incluye la biblioteca de Google Play Services?
- Cómo obtener la versión más reciente de la aplicación de Google PlayStore en caso de que se haya cargado el archivo mutiple apk
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.
- Cómo mostrar el diálogo de configuración de ubicación en android?
- Problema de ProGuard con Google Play Service y Firebase
- API de Google Play Services 9.2.0 Selective Compile Awareness
- G + con los servicios de Google Play accediendo a los intentos de correo electrónico del usuario Falta android.permission.GET_ACCOUNTS
- El selector de sitios de Android (PlacePicker) ya no tiene el icono Buscar después de actualizar a Google Play Services 9.0.83
- Uso del servicio LocationClient de Google Play Services en segundo plano
- Error: No se pudo encontrar la clase 'android.app.AppOpsManager', que se hace referencia desde el método com.google.android.gms.common.GooglePlayServicesUtil.zza
- Mostrar el selector de cuenta cada vez con GoogleSignInApi
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") }
- SQLite incapaz de abrir el archivo de base de datos (código 14) en la consulta "SELECT" frecuente
- ¿Cómo publicar una solicitud de HTTPS utilizando Retrofit?