过去几天我一直在尝试测试我的第一个应用内购买 iphone 应用程序。不幸的是,我找不到与 iTunes 服务器对话以验证 transactionReceipt 的方法。
因为这是我第一次尝试使用这项技术,所以我选择直接从 iPhone 验证收据,而不是使用服务器支持。但是在尝试使用来自谷歌代码的 JSON api 创建的 JSON onbject 发送 POST 请求后,iTunes 总是返回一个奇怪的响应(而不是我等待的“status = 0”字符串)。
这是我用来验证收据的代码:
- (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];
}
也许我忘记了请求标头中的某些内容,但我认为问题出在我用来创建 JSON 对象的方法上。
这是我将 JSON 对象添加到 HTTPBody 之前的样子:
string to send: {"receipt-data":"{\n\t\"signature\" = \"AUYMbhY
...........
D0gIjEuMCI7Cn0=\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}"}
我得到的回应:
完整响应 { exception = "java.lang.IllegalArgumentException: 尝试读取未加引号的字符串时属性列表解析失败。未找到允许的字符。行号:1,列:0。"; 状态 = 21002;}
非常感谢您的指导。