iOS APP内支付

一、证书配置(在此暂时不赘述了)

developer.apple.com/account/ios/identifier/bundle

二、苹果内支付需要的产品ID

创建内支付ID

1、创建一个新的APP(此APP的)  -> 看下图

iOS APP内支付_第1张图片
创建APP

                   选择新建APP<根据自己所需,此处已APP为例>

iOS APP内支付_第2张图片
添加APPID

  到此一个APP创建好了,当然如果需要上线的话,就需要详细填写内容,再次不多说了。此处仅作为内支付测试所以不需要填写,直接下一步>>>>>>>>>>>

iOS APP内支付_第3张图片
选择支付样式

iOS APP内支付_第4张图片

iOS APP内支付_第5张图片
>>>>>>>>>>>>>>


iOS APP内支付_第6张图片
添加一个测试账号
iOS APP内支付_第7张图片
储存、完工~



到此,一个产品ID创建完成,下面走一趟项目配置

三、项目配置

1、不废话,图片走起


iOS APP内支付_第8张图片
iOS APP内支付_第9张图片

到这里就差不多了,下面就是最想看到也是最简单的代码部分了。代码很简单、只是前期工作有点繁琐

四、代码 

1、头文件不会忘了吧

#import             // pay支付

2、协议还记得吧

3、复制代码的地方

#pragma mark ---- 苹果Pay支付

/** 苹果Pay支付 */

- (void)doApplePayWithData:(NSDictionary *)orderDic {

// 设置代理

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

//判断是否可进行支付

if ([SKPaymentQueue canMakePayments])

{

NSLog(@"许程序内付费购买");

//根据商品ID查找商品信息

NSArray *product = [[NSArray alloc] initWithObjects:@"申请到的产品ID", nil];

NSSet *nsset = [NSSet setWithArray:product];

//创建SKProductsRequest对象,用想要出售的商品的标识来初始化, 然后附加上对应的委托对象。

//该请求的响应包含了可用商品的本地化信息。

SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];

request.delegate = self;

[request start];

}

else

{

[SVProgressHUD showErrorWithStatus:@"不允许程序内付费"];

}

}

#pragma mark ---- SKProductsRequestDelegate

// 以上查询的回调函数

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

NSLog(@"----%lu---",(unsigned long)response.invalidProductIdentifiers.count);

NSLog(@"goods info back");

NSArray *myProduct = response.products;

if(myProduct.count == 0){

NSLog(@"无法获取产品信息,购买失败。");

return;

}

for(SKProduct *pro in myProduct){

NSLog(@"%@", [pro description]);

NSLog(@"%@", [pro localizedTitle]);

NSLog(@"%@", [pro localizedDescription]);

NSLog(@"%@", [pro price]);

NSLog(@"%@", [pro productIdentifier]);

NSLog(@"%@", [pro.priceLocale objectForKey:NSLocaleCurrencySymbol]);

NSLog(@"%@", [pro.priceLocale objectForKey:NSLocaleCurrencyCode]);

if([pro.productIdentifier isEqualToString:@"申请到的产品ID"]){

// 下面代码看需要

_currentProduct  = pro;

_appPayGoodsPrice = [NSString stringWithFormat:@"%@", [pro price]];

_appPayGoodsCurrency = [NSString stringWithFormat:@"%@",[pro.priceLocale objectForKey:NSLocaleCurrencyCode]];

break;

}

}

NSLog(@"start pay");

//创建一个支付对象,并放到队列中

SKPayment *payment = [SKPayment paymentWithProduct:_currentProduct];

NSLog(@"---------发送购买请求------------");

[[SKPaymentQueue defaultQueue] addPayment:payment];

}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {

NSLog(@"请求商品失败%@",error);

}

- (void)requestDidFinish:(SKRequest *)request {

[SVProgressHUD dismiss];

NSLog(@"反馈信息结束调用");

}

#pragma mark ---- SKPaymentTransactionObserver

// 监听购买结果

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{

NSLog(@"pay result");

for(SKPaymentTransaction *transaction in transactions){

switch (transaction.transactionState)

{

case SKPaymentTransactionStatePurchased:

{

//交易完成

NSLog(@"transactionIdentifier = %@", transaction.transactionIdentifier);

NSLog(@"---苹果Pay支付-交易完成---");

kSucPrompt(@"---苹果Pay支付-交易完成---");

}

break;

case SKPaymentTransactionStateFailed:

{

//交易失败

NSLog(@"---苹果Pay支付-交易失败---");

kFailPrompt(@"---苹果Pay支付-交易失败---");

}

break;

case SKPaymentTransactionStateRestored:

{

//已经购买过该商品

NSLog(@"---苹果Pay支付-已经购买过该商品---");

kFailPrompt(@"---苹果Pay支付-已经购买过该商品---");

}

break;

case SKPaymentTransactionStatePurchasing:

{

//商品添加进列表

NSLog(@"---苹果Pay支付-商品添加进列表---");

kSucPrompt(@"---苹果Pay支付-商品添加进列表---");

}

break;

default:

break;

}

}

}

//交易结束

- (void)completeTransaction:(SKPaymentTransaction *)transaction {

NSLog(@"交易结束");

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

}

//- (void)dealloc{

//    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

//    [[NSNotificationCenter defaultCenter] removeObserver:self];

//}


五、补充

1、支付测试前需要把测试机上面已登录的苹果账号注销掉;

2、沙箱测试员的邮箱需是未注册过苹果账号的邮箱;


ps:粗略整理,不完善之处望见谅~

你可能感兴趣的:(iOS APP内支付)