2015年最全的內(nèi)購圖文教程,首先是填各種資料,最后是代碼,廢話不多說,直接上圖
======================第一部分協(xié)議===============










CNAPS CODE 查詢地址
https://e.czbank.com/CORPORBANK/query_unionBank_index.jsp









=============第二部分創(chuàng)建內(nèi)購項(xiàng)目============







===========第三部分貼加內(nèi)購項(xiàng)目測試賬號==========



=============第四部分主要實(shí)現(xiàn)代碼==========
首先導(dǎo)入StoreKit.framework庫
.h文件#import <StoreKit/StoreKit.h>enum{IAP0p20=20,IAP1p100,IAP4p600,IAP9p1000,IAP24p6000,}buyCoinsTag;//代理@interface RechargeVC : UIViewController <SKPaymentTransactionObserver,SKPRoductsRequestDelegate >{int buyType;}- (void) requestProUpgradeProductData;-(void)RequestProductData;-(void)buy:(int)type;- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction;- (void) completeTransaction: (SKPaymentTransaction *)transaction;- (void) failedTransaction: (SKPaymentTransaction *)transaction;-(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction;-(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error;- (void) restoreTransaction: (SKPaymentTransaction *)transaction;-(void)provideContent:(NSString *)product;-(void)recordTransaction:(NSString *)product;@end.m文件#import "RechargeVC.h"//在內(nèi)購項(xiàng)目中創(chuàng)的商品單號#define ProductID_IAP0p20 @"Nada.JPYF01"http://20#define ProductID_IAP1p100 @"Nada.JPYF02" //100#define ProductID_IAP4p600 @"Nada.JPYF03" //600#define ProductID_IAP9p1000 @"Nada.JPYF04" //1000#define ProductID_IAP24p6000 @"Nada.JPYF05" //6000@interface RechargeVC ()@end@implementation RechargeVC- (void)viewDidLoad { [super viewDidLoad]; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [self buy:IAP0p20];}-(void)buy:(int)type{ buyType = type; if ([SKPaymentQueue canMakePayments]) { [self RequestProductData]; NSLog(@"允許程序內(nèi)付費(fèi)購買");}else{ NSLog(@"不允許程序內(nèi)付費(fèi)購買"); UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您的手機(jī)沒有打開程序內(nèi)付費(fèi)購買" delegate:nil cancelButtonTitle:NSLocalizedString(@"關(guān)閉",nil) otherButtonTitles:nil]; [alerView show]; }}-(void)RequestProductData{ NSLog(@"---------請求對應(yīng)的產(chǎn)品信息------------"); NSArray *product = nil; switch (buyType) { case IAP0p20: product=[[NSArray alloc] initWithObjects:ProductID_IAP0p20,nil]; break; case IAP1p100: product=[[NSArray alloc] initWithObjects:ProductID_IAP1p100,nil]; break; case IAP4p600: product=[[NSArray alloc] initWithObjects:ProductID_IAP4p600,nil]; break; case IAP9p1000: product=[[NSArray alloc] initWithObjects:ProductID_IAP9p1000,nil]; break; case IAP24p6000: product=[[NSArray alloc] initWithObjects:ProductID_IAP24p6000,nil]; break; default: break;} NSSet *nsset = [NSSet setWithArray:product]; SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers: nsset]; request.delegate=self; [request start];}//<SKProductsRequestDelegate> 請求協(xié)議//收到的產(chǎn)品信息- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ NSLog(@"-----------收到產(chǎn)品反饋信息--------------"); NSArray *myProduct = response.products; NSLog(@"產(chǎn)品Product ID:%@",response.invalidProductIdentifiers); NSLog(@"產(chǎn)品付費(fèi)數(shù)量: %d", (int)[myProduct count]); // populate UI for(SKProduct *product in myProduct){ NSLog(@"product info"); NSLog(@"SKProduct 描述信息%@", [product description]); NSLog(@"產(chǎn)品標(biāo)題 %@" , product.localizedTitle); NSLog(@"產(chǎn)品描述信息: %@" , product.localizedDescription); NSLog(@"價格: %@" , product.price); NSLog(@"Product id: %@" , product.productIdentifier);} SKPayment *payment = nil; switch (buyType) { case IAP0p20: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP0p20]; //支付25 break; case IAP1p100: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP1p100]; //支付108 break; case IAP4p600: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP4p600]; //支付618 break; case IAP9p1000: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP9p1000]; //支付1048 break; case IAP24p6000: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP24p6000]; //支付5898 break; default: break;} NSLog(@"---------發(fā)送購買請求------------"); [[SKPaymentQueue defaultQueue] addPayment:payment];}- (void)requestProUpgradeProductData{ NSLog(@"------請求升級數(shù)據(jù)---------"); NSSet *productIdentifiers = [NSSet setWithObject:@"com.productid"]; SKProductsRequest* productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; productsRequest.delegate = self; [productsRequest start];}//彈出錯誤信息- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{ NSLog(@"-------彈出錯誤信息----------"); UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert",NULL) message:[error localizedDescription] delegate:nil cancelButtonTitle:NSLocalizedString(@"Close",nil) otherButtonTitles:nil]; [alerView show];}-(void) requestDidFinish:(SKRequest *)request{ NSLog(@"----------反饋信息結(jié)束--------------");}-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction{ NSLog(@"-----PurchasedTransaction----"); NSArray *transactions =[[NSArray alloc] initWithObjects:transaction, nil]; [self paymentQueue:[SKPaymentQueue defaultQueue] updatedTransactions:transactions];}//<SKPaymentTransactionObserver> 千萬不要忘記綁定,代碼如下://----監(jiān)聽購買結(jié)果//[[SKPaymentQueue defaultQueue] addTransactionObserver:self];- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易結(jié)果{ NSLog(@"-----paymentQueue--------"); for (SKPaymentTransaction *transaction in transactions) { switch (transaction.transactionState) { case SKPaymentTransactionStatePurchased:{//交易完成 [self completeTransaction:transaction]; NSLog(@"-----交易完成 --------"); UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"" message:@"購買成功" delegate:nil cancelButtonTitle:NSLocalizedString(@"關(guān)閉",nil) otherButtonTitles:nil]; [alerView show]; } break; case SKPaymentTransactionStateFailed://交易失敗 { [self failedTransaction:transaction]; NSLog(@"-----交易失敗 --------"); UIAlertView *alerView2 = [[UIAlertView alloc] initWithTitle:@"提示" message:@"購買失敗,請重新嘗試購買" delegate:nil cancelButtonTitle:NSLocalizedString(@"關(guān)閉",nil) otherButtonTitles:nil]; [alerView2 show]; }break; case SKPaymentTransactionStateRestored://已經(jīng)購買過該商品 [self restoreTransaction:transaction]; NSLog(@"-----已經(jīng)購買過該商品 --------"); case SKPaymentTransactionStatePurchasing: //商品添加進(jìn)列表 NSLog(@"-----商品添加進(jìn)列表 --------"); break; default: break; } }}- (void) completeTransaction: (SKPaymentTransaction *)transaction{ NSLog(@"-----completeTransaction--------"); // Your application should implement these two methods. NSString *product = transaction.payment.productIdentifier; if ([product length] > 0) { NSArray *tt = [product componentsSeparatedByString:@"."]; NSString *bookid = [tt lastObject]; if ([bookid length] > 0) { [self recordTransaction:bookid]; [self provideContent:bookid];}} // Remove the transaction from the payment queue. [[SKPaymentQueue defaultQueue] finishTransaction: transaction];}//記錄交易-(void)recordTransaction:(NSString *)product{ NSLog(@"-----記錄交易--------");}//處理下載內(nèi)容-(void)provideContent:(NSString *)product{ NSLog(@"-----下載--------");}- (void) failedTransaction: (SKPaymentTransaction *)transaction{ NSLog(@"失敗"); if (transaction.error.code != SKErrorPaymentCancelled) { } [[SKPaymentQueue defaultQueue] finishTransaction: transaction];}-(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction{}- (