我正在获得21004作为状态值来回应苹果的沙盒服务器测试ios中的自动续订订阅?

时间:2013-02-20 09:33:53

标签: xcode in-app-purchase

我正在测试应用内购买自动续订订阅但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");
}
}

有人可以帮助我获得正确的收据验证吗?

2 个答案:

答案 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,你可以生成一个共享秘密,或者你可以查看以前的共享秘密