0

我有一个可自动更新的应用内购买。当用户第一次注册时,应用程序会收到 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

4

1 回答 1

0

一旦将您的代码更改为

NSString *jsonObjectString = [self encodeBase64:(uint8_t *)transaction.transactionReceipt.bytes
                                         length:transaction.transactionReceipt.length];
于 2013-09-11T09:13:27.327 回答