我有一个可自动更新的应用内购买。当用户第一次注册时,应用程序会收到NSDATA形式的收据。我把它编码成一个字符串:
[NSString stringWithUTF8String:[receiptData bytes]]];
然后我将它作为blob发布到我的服务器上。
然后,当用户登录应用程序时,我从服务器获取收据,将其更改为NSDATA:
[receipt dataUsingEncoding:NSUTF8StringEncoding]
然后我在其上运行一个方法来验证收据是否有效。从我的阅读中我得知,回复将是一个较新的收据,或某种状态代码,说明其有效与否。
NSString *jsonObjectString = [self encodeBase64:(uint8_t *)receipt.bytes
length:receipt.length];
NSString *itunescombo = @"xxxxxxxxxxxxxxxxxxxxxx";
// Create the POST request payload.
NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\", \"password\" : \"%@\"}",
jsonObjectString, itunescombo];
NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding];
NSString *serverURL = ITMS_SANDBOX_VERIFY_RECEIPT_URL;
// Create the POST request to the server.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverURL]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:payloadData];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];
然后作为回应,我一直得到:
{"status":21002, "exception":"java.lang.IllegalArgumentException"}
或只是
{"status":21002}
有人可以告诉我哪里出错了吗?该错误意味着收据的格式不正确,但我不确定在所有格式操作之间发生了什么。
谢谢! [R
答案 0 :(得分:0)
将代码更改为
NSString *jsonObjectString = [self encodeBase64:(uint8_t *)transaction.transactionReceipt.bytes
length:transaction.transactionReceipt.length];