應用內支付

http://www.cocoachina.com/bbs/read.php?tid-24738-page-1.htmlphp

http://wenku.it168.com/d_000651373.shtml html

http://blog.csdn.net/shenjie12345678/article/details/40978977 服務器

#import "ViewController.h"
#import <StoreKit/StoreKit.h>
@interface ViewController ()<SKProductsRequestDelegate,SKPaymentTransactionObserver>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    //監聽購買結果
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    
    //判斷是否容許應用內支付
    if ([SKPaymentQueue canMakePayments]){
        [self getProductInfo];
    }
    else{
    
        NSLog(@"失敗,用戶禁止應用內付費購買");
    }
}

-(void)viewDidUnload{
    [super viewDidLoad];
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}

-(void)getProductInfo
{
    NSSet *set = [NSSet setWithArray:@[@"ProductId"]];
    SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:set];
    request.delegate = self;
    [request start];

}
#pragma mark 查詢回調函數 
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
    NSArray *myProuduct = response.products;
    if (myProuduct.count == 0){
        NSLog(@"沒法獲取產品信息,購買失敗");
        return;
    }
    SKPayment *payment = [SKPayment paymentWithProduct:myProuduct[0]];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

#pragma mark 操做有結果時 回調函數
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions{
    for (SKPaymentTransaction *tramsaction in transactions){
        switch (tramsaction.transactionState) {
            case SKPaymentTransactionStatePurchased://交易完成
                [self completeTransaction:tramsaction];
                break;
            case SKPaymentTransactionStateFailed://交易失敗
                [self failedTransaction:tramsaction];
                break;
            case SKPaymentTransactionStatePurchasing://商品添加進列表
                NSLog(@"商品添加進列表");
                break;;
            case SKPaymentTransactionStateRestored://已經購買過該商品
                [self restoreTransaction:tramsaction];
                break;
            default:
                break;
        }
        
    }

}
-(void)completeTransaction:(SKPaymentTransaction *)transaction{
    NSString *productIdentifier = transaction.payment.productIdentifier;
    NSString *receipt = [transaction.transactionReceipt base64Encoding];
    if ([productIdentifier length]>0){
    //向本身的服務器驗證購買憑證
    }
    [[SKPaymentQueue defaultQueue]finishTransaction:transaction];
}
-(void)failedTransaction:(SKPaymentTransaction *)transaction{
    if (transaction.error.code != SKErrorPaymentCancelled){
        NSLog(@"購買失敗");
    }else{
        NSLog(@"用戶取消交易");
    }
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
-(void)restoreTransaction:(SKPaymentTransaction *)transaction{
    //對於已購商品,處理恢復購買的邏輯
    [[SKPaymentQueue defaultQueue]finishTransaction:transaction];
    
}

@end
相關文章
相關標籤/搜索