博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
苹果内购买
阅读量:5164 次
发布时间:2019-06-13

本文共 3413 字,大约阅读时间需要 11 分钟。

#import <StoreKit/StoreKit.h>

<SKProductsRequestDelegate,SKPaymentTransactionObserver>

1、根据商品id,请求商品列表

   NSArray *product = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ProductList" ofType:@"plist"]];    NSSet *nsset = [NSSet setWithArray:product];    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];    request.delegate = self;    [request start];

2、请求结果

//收到产品返回信息- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{    //商品信息    NSArray *product = response.products;}//请求失败- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{}//请求结束- (void)requestDidFinish:(SKRequest *)request{}

3、发起支付请求

SKPayment *payment = [SKPayment paymentWithProduct:product];[[SKPaymentQueue defaultQueue] addPayment:payment];

4、监听购买结果

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{    for(SKPaymentTransaction *tran in transaction){        switch (tran.transactionState) {            case SKPaymentTransactionStatePurchased:{
NSLog(@"交易完成"); // 发送到苹果服务器验证凭证 [self verifyPurchaseWithPaymentTransaction]; [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } break; case SKPaymentTransactionStatePurchasing: NSLog(@"商品添加进列表"); break; case SKPaymentTransactionStateRestored:{
NSLog(@"已经购买过商品"); [[SKPaymentQueue defaultQueue] finishTransaction:tran]; } break; case SKPaymentTransactionStateFailed:{
NSLog(@"交易失败"); [[SKPaymentQueue defaultQueue] finishTransaction:tran]; [SVProgressHUD showErrorWithStatus:@"购买失败"]; } break; default: break; } }}

5、验证购买结果

-(void)verifyPurchaseWithPaymentTransaction{    //从沙盒中获取交易凭证并且拼接成请求体数据    NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];    NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];    //转化为base64字符串    NSString *receiptString=[receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];    //拼接请求数据    NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];    NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];        //创建请求到苹果官方进行购买验证    NSURL *url=[NSURL URLWithString:AppStore];    NSMutableURLRequest *requestM=[NSMutableURLRequest requestWithURL:url];    requestM.HTTPBody=bodyData;    requestM.HTTPMethod=@"POST";        //创建连接并发送同步请求    NSError *error=nil;    NSData *responseData=[NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error]; if (error) {
NSLog(@"验证购买过程中发生错误,错误信息:%@",error.localizedDescription); return; } NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil]; NSLog(@"%@",dic); if([dic[@"status"] intValue]==0){
NSLog(@"购买成功!"); }else{
NSLog(@"购买失败,未通过验证!"); }}

6、交易结束

//交易结束- (void)completeTransaction:(SKPaymentTransaction *)transaction{    NSLog(@"交易结束");    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];}

 

转载于:https://www.cnblogs.com/z-z-z/p/7699223.html

你可能感兴趣的文章
linux 修改ssh端口号
查看>>
Android-Layer list
查看>>
Java语言中的访问权限修饰符
查看>>
iOS9新特性之常见关键字
查看>>
codeforce好地方啊 Bear and Elections *
查看>>
破解wifi_失败
查看>>
20145332 《网络攻防》 逆向与Bof实验
查看>>
子元素设置margin-top,父元素无法将margin-top包含在父容器的原因及解决办法
查看>>
Centos服务器搭建(6)——安装JDK
查看>>
C语言_第二讲_规范以及常用数据类型
查看>>
RIP的缺点
查看>>
Unity最优化摘要
查看>>
类模板使用说明
查看>>
Redis源代码分析(一)--Redis结构解析
查看>>
Flex父子窗体相互调用
查看>>
改动网卡IP信息
查看>>
【Java】国内maven私服
查看>>
第三方开源水面波浪波形view:WaveView
查看>>
POJ 2251 Dungeon Master(3D迷宫 bfs)
查看>>
Linux查看和编辑文件
查看>>