如何在iOS中解析应用内购买的收据

时间:2015-03-31 09:14:15

标签: ios in-app-purchase receipt

我正在尝试在我的IAP中实现订阅模型,所以我读了苹果文档,

Apple提到了两种方法

a)本地验证

b)使用App store进行验证(我们需要自己的服务器进行通话)

我使用了第二种方法并编写了代码,如苹果文档中所述,但是

我没有自己的服务器,

以下是我解析收据的方式

NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];


                NSError *error;


                NSDictionary *requestContents = @{
                                                  @"receipt-data": [receipt base64EncodedStringWithOptions:0]
                                                  };

                NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
                                                                      options:0
                                                                        error:&error];


                if (!requestData) { /* ... Handle error ... */ }



                //  NSError *error;
                NSURL *storeURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];
                NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];
                [storeRequest setHTTPMethod:@"POST"];
                [storeRequest setHTTPBody:requestData];

                // Make a connection to the iTunes Store on a background queue.
                NSOperationQueue *queue = [[NSOperationQueue alloc] init];
                [NSURLConnection sendAsynchronousRequest:storeRequest queue:queue
                                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                                           if (connectionError) {
                                               /* ... Handle error ... */
                                           } else {
                                               NSError *error;
                                               NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

                                               if (!jsonResponse) { /* ... Handle error ...*/ }
                                               /* ... Send a response back to the device ... */
                                           }
                                       }];

我完全得到了回复,我可以看到所有细节。

但是文档中的苹果提到了这个“直接在用户设备和App Store之间建立可信连接是不可能的,因为你不能控制该连接的任何一端。”

所以我不确定,我是否可以将此代码用于我的制作。

其次,苹果提到在本地验证收据的第一种方法,我想知道如何解析收据。他们谈论了一些Payload,它是PKCS#7容器。那么如何解析这个。

此致 兰吉特

0 个答案:

没有答案