======================第一部分协议===============
第一步.png
第二步.jpg
第三步.jpg
第四步.png
第五步.png
第六步.png
第七步.jpg
第八步.jpg
第九步.jpg
第十步.png
CNAPS CODE 查询地址
https://e.czbank.com/CORPORBANK/query_unionBank_index.jsp
十一步.jpg
十二步.jpg
十三步.png
十四步.png
十五步.jpg
十七步.jpg
十八步.jpg
十九步.png
2016/11/18号更新
十九步(1).png
十九步(2).png
没显示的都是可以不填的,主要是打钩 title 和最后面的Self
二十步.png
=============第二部分创建内购项目============
1.png
2.png
3.png
4.png
5.png
6.png
7.png
===========第三部分贴加内购项目测试账号==========
创建测试账号.png
沙盒测试员.png
账号信息.png
=============第四部分主要实现代码==========
首先导入StoreKit.framework库
.h文件
#import<StoreKit/StoreKit.h>
enum{
IAP0p20=20,
IAP1p100,
IAP4p600,
IAP9p1000,
IAP24p6000
}buyCoinsTag;
//代理
@interfaceRechargeVC:UIViewController<SKPaymentTransactionObserver,SKProductsRequestDelegate>
{
intbuyType;
}
- (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"
//在内购项目中创的商品单号
#define ProductID_IAP0p20@"Nada.JPYF01"//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
@interfaceRechargeVC()
@end
@implementation RechargeVC
- (void)viewDidLoad {
[superviewDidLoad];
[[SKPaymentQueuedefaultQueue] addTransactionObserver:self];
[selfbuy:IAP0p20];
}
-(void)buy:(int)type{
buyType = type;
if([SKPaymentQueuecanMakePayments]) {
[selfRequestProductData];
NSLog(@"允许程序内付费购买");
}else{
NSLog(@"不允许程序内付费购买");
UIAlertView*alerView = [[UIAlertViewalloc] initWithTitle:@"提示"message:@"您的手机没有打开程序内付费购买"delegate:nilcancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];
[alerView show];
}
}
-(void)RequestProductData{
NSLog(@"---------请求对应的产品信息------------");
NSArray*product =nil;
switch(buyType) {
caseIAP0p20:
product=[[NSArrayalloc] initWithObjects:ProductID_IAP0p20,nil];
break;
caseIAP1p100:
product=[[NSArrayalloc] initWithObjects:ProductID_IAP1p100,nil];
break;
caseIAP4p600:
product=[[NSArrayalloc] initWithObjects:ProductID_IAP4p600,nil];
break;
caseIAP9p1000:
product=[[NSArrayalloc] initWithObjects:ProductID_IAP9p1000,nil];
break;
caseIAP24p6000:
product=[[NSArrayalloc] initWithObjects:ProductID_IAP24p6000,nil];
break;
default:
break;
}
NSSet*nsset = [NSSetsetWithArray:product];
SKProductsRequest*request=[[SKProductsRequestalloc] initWithProductIdentifiers: nsset]; request.delegate=self;
[request start];
}
// 请求协议//收到的产品信息
- (void)productsRequest:(SKProductsRequest*)request didReceiveResponse:(SKProductsResponse*)response{
NSLog(@"-----------收到产品反馈信息--------------");
NSArray*myProduct = response.products;
NSLog(@"产品Product ID:%@",response.invalidProductIdentifiers);
NSLog(@"产品付费数量: %d", (int)[myProduct count]);
// populate UI
for(SKProduct*productinmyProduct){
NSLog(@"product info");
NSLog(@"SKProduct 描述信息%@", [product description]);
NSLog(@"产品标题 %@", product.localizedTitle);
NSLog(@"产品描述信息: %@", product.localizedDescription);
NSLog(@"价格: %@", product.price);
NSLog(@"Product id: %@", product.productIdentifier);
}
SKPayment*payment =nil;
switch(buyType) {
caseIAP0p20:
payment = [SKPaymentpaymentWithProductIdentifier:ProductID_IAP0p20];//支付25
break;
caseIAP1p100:
payment = [SKPaymentpaymentWithProductIdentifier:ProductID_IAP1p100];//支付108
break;
caseIAP4p600:
payment = [SKPaymentpaymentWithProductIdentifier:ProductID_IAP4p600];//支付618
break;
caseIAP9p1000:
payment = [SKPaymentpaymentWithProductIdentifier:ProductID_IAP9p1000];//支付1048
break;
caseIAP24p6000:
payment = [SKPaymentpaymentWithProductIdentifier:ProductID_IAP24p6000];//支付5898
break;
default:
break;
}NSLog(@"---------发送购买请求------------");
[[SKPaymentQueuedefaultQueue] addPayment:payment];
}
- (void)requestProUpgradeProductData{
NSLog(@"------请求升级数据---------");
NSSet*productIdentifiers = [NSSetsetWithObject:@"com.productid"];
SKProductsRequest* productsRequest = [[SKProductsRequestalloc] initWithProductIdentifiers:productIdentifiers];
productsRequest.delegate =self;
[productsRequest start];
}
//弹出错误信息
- (void)request:(SKRequest*)request didFailWithError:(NSError*)error{
NSLog(@"-------弹出错误信息----------");
UIAlertView*alerView = [[UIAlertViewalloc] initWithTitle:NSLocalizedString(@"Alert",NULL) message:[error localizedDescription] delegate:nilcancelButtonTitle:NSLocalizedString(@"Close",nil) otherButtonTitles:nil];
[alerView show];
}
-(void) requestDidFinish:(SKRequest*)request{
NSLog(@"----------反馈信息结束--------------");
}
-(void) PurchasedTransaction: (SKPaymentTransaction*)transaction{
NSLog(@"-----PurchasedTransaction----");
NSArray*transactions =[[NSArrayalloc] initWithObjects:transaction,nil];
[selfpaymentQueue:[SKPaymentQueuedefaultQueue] updatedTransactions:transactions];
}
// 千万不要忘记绑定,代码如下://----监听购买结果//[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
- (void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray*)transactions
//交易结果
{
NSLog(@"-----paymentQueue--------");
for(SKPaymentTransaction*transactionintransactions) {
switch(transaction.transactionState){
caseSKPaymentTransactionStatePurchased:{
//交易完成
[selfcompleteTransaction:transaction];
NSLog(@"-----交易完成 --------");
UIAlertView*alerView = [[UIAlertViewalloc] initWithTitle:@""message:@"购买成功"delegate:nilcancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil]; [alerView show];
}
break;
caseSKPaymentTransactionStateFailed:/
/交易失败
{
[selffailedTransaction:transaction];
NSLog(@"-----交易失败 --------");
UIAlertView*alerView2 = [[UIAlertViewalloc] initWithTitle:@"提示"message:@"购买失败,请重新尝试购买"delegate:nilcancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil]; [alerView2 show];
}
break;
caseSKPaymentTransactionStateRestored:
//已经购买过该商品[selfrestoreTransaction:transaction];
NSLog(@"-----已经购买过该商品 --------");
caseSKPaymentTransactionStatePurchasing:
//商品添加进列表NSLog(@"-----商品添加进列表 --------");
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) {
[selfrecordTransaction:bookid];
[selfprovideContent:bookid];
}
}
// Remove the transaction from the payment queue.
[[SKPaymentQueuedefaultQueue] finishTransaction: transaction];
}
//记录交易
-(void)recordTransaction:(NSString*)product{
NSLog(@"-----记录交易--------");
}
//处理下载内容
-(void)provideContent:(NSString*)product{NSLog(@"-----下载--------");
}
- (void) failedTransaction: (SKPaymentTransaction*)transaction{
NSLog(@"失败");
if(transaction.error.code !=SKErrorPaymentCancelled) {
}
[[SKPaymentQueuedefaultQueue] finishTransaction: transaction];
}
-(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction*)transaction{
}
- (void) restoreTransaction: (SKPaymentTransaction*)transaction{
NSLog(@" 交易恢复处理");
}
-(void) paymentQueue:(SKPaymentQueue*) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError*)error{
NSLog(@"-------paymentQueue----");
}
#pragma mark connection delegate
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{
NSLog(@"%@", [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection{}- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{
switch([(NSHTTPURLResponse*)response statusCode]) {
case200:
case206:
break;
case304:
break;
case400:
break;
case404:
break;
case416:
break;
case403:
break;
case401:
case500:
break;
default:
break;
}
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
NSLog(@"test");
}
-(void)dealloc{
[[SKPaymentQueuedefaultQueue] removeTransactionObserver:self];
//解除监听
}
@end
2016/11/22更新
内购项目不再是单独提交审核了,只要app提交审核内购项目自然跟着改变状态,不消耗物品请不要选择 托管那一项,不然会出现问题