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