J'ai passé ces derniers jours à essayer de tester ma première application pour l'iPhone. Malheureusement, je ne trouve pas le moyen de parler au serveur iTunes pour vérifier la transactionReceipt. Parce que c'est mon premier essai avec cette technologie, j'ai choisi de vérifier le reçu directement à partir de l'iPhone à la place en utilisant le support du serveur. Mais après avoir essayé d'envoyer la requête POST avec un onbject JSON créé à l'aide de l'API JSON de google code, itunes renvoie toujours une réponse étrange (à la place de la chaîne "status = 0" que j'attends).Générer un objet JSON avec transactionReceipt
Voici le code que j'utiliser pour vérifier la réception:
- (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];
}
peut-être que je suis oublier quelque chose dans les en-têtes de la demande, mais je pense que le problème est dans la méthode que je l'utilise pour créer l'objet JSON.
VOICI comment l'objet JSON ressemble avant de l'ajouter à la HTTPBody:
string to send: {"receipt-data":"{\n\t\"signature\" = \"AUYMbhY
...........
D0gIjEuMCI7Cn0=\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}"}
Les réponses que j'ai:
réponse complète { exception = « java.lang. IllegalArgumentException: l'analyse de la liste des propriétés a échoué lors de la tentative de lecture de la chaîne sans guillemets Aucun caractère autorisé n'a été trouvé Au numéro de ligne: 1, colonne: 0. "; statut = 21002; }
Merci beaucoup pour votre aide.
Nulle part dans la documentation ne dit que le 'transactionReceipt' peut être interprété comme une chaîne encodée en UTF-8 – user102008