He estado los últimos días tratando de probar mi primera aplicación de purchse iphone en la aplicación. Lamentablemente, no puedo encontrar la manera de hablar con el servidor de iTunes para verificar el transactionReceipt.Generar objeto JSON con transactionReceipt
Como es mi primer intento con esta tecnología, decidí verificar el recibo directamente desde el iPhone utilizando el soporte del servidor. Pero después de tratar de enviar la solicitud POST con un objeto JSON creado utilizando la API JSON del código de google, itunes siempre devuelve una respuesta extraña (en cambio, la cadena "estado = 0" que espero).
Aquí está el código que utilizo para verificar la recepción:
- (void)recordTransaction:(SKPaymentTransaction *)transaction {
NSString *receiptStr = [[NSString alloc] initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"algo mas",@"receipt-data",nil];
NSString *jsonString = [jsonDictionary JSONRepresentation];
NSLog(@"string to send: %@",jsonString);
NSLog(@"JSON Created");
urlData = [[NSMutableData data] retain];
//NSURL *sandboxStoreURL = [[NSURL alloc] initWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"will create connection");
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
tal vez me estoy olvidando de algo en las cabeceras de la petición, pero creo que el problema está en el método que utilizo para crear el objeto JSON.
Así es como el objeto JSON se ve como antes de añadirlo a la HTTPBody:
string to send: {"receipt-data":"{\n\t\"signature\" = \"AUYMbhY
...........
D0gIjEuMCI7Cn0=\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}"}
Las respuestas que tengo:
respuesta completa { excepción = "java.lang. IllegalArgumentException: el análisis de la lista de propiedades falló al intentar leer cadenas sin comillas. No se encontraron caracteres permitidos. En el número de línea: 1, columna: 0. "; estado = 21002; }
Muchas gracias por su orientación.
En ninguna parte de la documentación se dice que el 'transactionReceipt' se puede interpretar como una cadena codificada en UTF-8 – user102008