我正在测试应用内购买自动续订订阅但Apple的沙盒服务器始终返回status = 21004
#define SHARED_SECRET @"INSERT HERE YOUR ITUNESCONNECT SHARED SECRECT KEY FOR AUTORENEWABLE SUBCRIPTIONS RECEIPT VALIDATION"
-(void)checkReceipt {
// verifies receipt with Apple
NSError *jsonError = nil;
NSString *receiptBase64 = [NSString base64StringFromData:receiptData length:[receiptData length]];
NSLog(@"Receipt Base64: %@",receiptBase64);
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[NSDictionary dictionaryWithObjectsAndKeys:
receiptBase64,@"receipt-data",
SHARED_SECRET,@"password",
nil]
options:NSJSONWritingPrettyPrinted
error:&jsonError
];
NSLog(@"%@",jsonData);
NSError * error=nil;
NSDictionary * parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
NSLog(@"%@",parsedData);
NSLog(@"JSON: %@",[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
// URL for sandbox receipt validation; replace "sandbox" with "buy" in production or you will receive
// error codes 21006 or 21007
NSURL *requestURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:requestURL];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:jsonData];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if(conn) {
receivedData = [[NSMutableData alloc] init];
} else {
completionBlock(NO,@"Cannot create connection");
}
}
有人可以帮助我获得正确的收据验证吗?
答案 0 :(得分:20)
您必须使用从iTunes Connect获得的密钥替换顶部INSERT HERE YOUR ITUNESCONNECT SHARED SECRECT KEY FOR AUTORENEWABLE SUBCRIPTIONS RECEIPT VALIDATION
的此文本。 (显然,不要在Stack Overflow上发布完整的秘密)。
秘密通常是一个32位数字的字母数字字符串,看起来像这个39fkjc38jd02mg72k9cn29dfkm39fk00
(这个是假的)。
在(新)iTunes Connect中转到我的应用> (然后点击你的应用)> 应用内购买> 查看或生成共享密钥
答案 1 :(得分:1)
转到ituenes connet,然后转到你的应用程序然后转到ManageInApp购买,然后在这里看到左下角有一个选项视图或生成一个sharedsecret,你可以生成一个共享秘密,或者你可以查看以前的共享秘密