iOS开发应用内支付总结


应用内支付详细流程:

首先是添加StoreKit.framework

然后是具体的步骤:

1. 决定在程序内出售的商品的类型。
   出售商品的类型主要有订阅,服务的,内容的,如果商品类型不再其中,就不能出售。

2. 通过iTunes Connect注册商品
每次添加新商品的时候都需要执行这一步骤,每个商品都需要一个唯一的商品标识。 App Store通过这个标识来查找商品信息并处理支付流程。 注册商品标识的方法和注册程序的方法类似。

3. 检测是否可以进行支付
在发送支付请求之前,程序应该检查该功能是否被开启。程序可在显示商店界面之前就检查该设置(没启用就不显示商店界面了),也可以在用户发送支付请求前再检查,这样用户就可以看到可购买的商品列表了。

例子:

  1. if([SKPaymentQueue canMakePayments])  
  2. {  
  3.     ...//Display a store to the user 
  4. }  
  5. else 
  6. {  
  7.     ...//Warn the user that purchases are disabled. 

4. 获得商品的信息
程序创建SKProductsRequest对象,用想要出售的商品的标识来初始化, 然后附加上对应的委托对象。 该请求的响应包含了可用商品的本地化信息。

  1. //这里发送请求 
  2. - (void)requestProductData  
  3. {  
  4.     SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:  
  5.     [NSSet setWithObject: kMyFeatureIdentifier]];  
  6.       
  7.     request.delegate = self;  
  8.     [request start];  
  9. }  
  10.  
  11. //这个是响应的delegate方法 
  12. - (void)productsRequest: (SKProductsRequest *)request  
  13. didReceiveResponse: (SKProductsResponse *)response  
  14. {  
  15.     NSArray *myProduct = response.products;  
  16.  
  17.     //生成商店的UI 
  18.     [request autorelease];  

 

5. 添加一个展示商品的界面
Store Kit不提供界面的类。 这个界面需要我们自己来设计并实现。

6. 为支付队列(payment queue)注册一个观察者对象
程序需要初始化一个transaction observer对象并把它指定为payment queue的观察者。

上代码:

  1. MyStoreObserver *observer = [[MyStoreObserver alloc]init];  
  2. [[SKPaymentQueue defaultQueue]addTransactionObserver: observer]; 

应该在程序启动的时候就添加好观察者,原因前面说过,重启后程序会继续上次未完的交易,这时就添加观察者对象就不会漏掉之前的交易信息。

7. 在MyStoreObserver类中执行paymentQueue: updatedTransactions: 方法。
这个方法会在有新的交易被创建,或者交易被更新的时候被调用。

  1. - (void)paymentQueue: (SKPaymentQueue *)queue updatedTransactions: (NSArray *)transactions  
  2. {  
  3.     for(SKPaymentTransaction * transaction in transactions)  
  4.     {  
  5.         switch(transaction.transactionState)  
  6.         {  
  7.             case SKPaymentTransactionStatePurchased:  
  8.                 [self completeTransaction: transaction];  
  9.                 break;  
  10.             case SKPaymentTransactionStateFailed:  
  11.                 [self failedTransaction: transaction];  
  12.                 break;  
  13.             case SKPaymentTransactionStateRestored:  
  14.                 [self restoreTransaction: transaction];  
  15.             default:  
  16.                 break;  
  17.         }  
  18.     }  

 

上面的函数针对不同的交易返回状态,调用对应的处理函数。

8. 观察者对象在用户成功购买一件商品时,提供相应的内容,以下是在交易成功后调用的方法

  1. - (void) completeTransaction: (SKPaymentTransaction *)transaction  
  2. {  
  3.     //你的程序需要实现这两个方法 
  4.     [self recordTransaction: transaction];  
  5.     [self provideContent: transaction.payment.productIdentifier];  
  6.       
  7.     //将完成后的交易信息移出队列 
  8.     [[SKPaymentQueue defaultQueue]finishTransaction: transaction];  

交易成功的信息包含transactionIdentifier和transactionReceipt的属性。其中,transactionReceipt记录了支付的详细信息,这个信息可以帮助你跟踪、审(我们的)查交易,如果你的程序是用服务器来交付内容,transactionReceipt可以被传送到服务器,然后通过App Store验证交易。

9. 如果交易是恢复过来的(restore),我们用这个方法来处理:

  1. - (void) restoreTransaction: (SKPaymentTransaction *)transaction  
  2. {  
  3.     [self recordTransaction: transaction];  
  4.     [self provideContent: transaction.payment.productIdentifier];  
  5.  
  6.     [[SKPaymentQueue defaultQueue] finishTransaction: transaction];  

这个过程完成购买的过程类似。 恢复的购买内容提供一个新的交易信息,这个信息包含了新的transaction的标识和receipt数据。 如果需要的话,你可以把这些信息单独保存下来,供追溯审(我们的)查之用。但更多的情况下,在交易完成时,你可能需要覆盖原始的transaction数据,并使用其中的商品标识。

10. 交易过程失败的话,我们调用如下的方法:

  1. - (void)failedTransaction: (SKPaymentTransaction *)transaction  
  2. {  
  3.     if(transaction.error.code != SKErrorPaymentCancelled)  
  4.     {  
  5.         //在这类显示除用户取消之外的错误信息 
  6.     }  
  7.  
  8.     [[SKPaymentQueue defaultQueue] finishTransaction: transaction];  

 

通常情况下,交易失败的原因是取消购买商品的流程。 程序可以从error中读出交易失败的详细信息。

显示错误信息不是必须的,但在上面的处理方法中,需要将失败的交易从支付队列中移除。 一般来说,我们用一个对话框来显示错误信息,这时就应避免将用户取消购买这个error显示出来。

11. 组织好程序内“商店”的UI。当用户选择一件商品时, 创建一个支付对象,并放到队列中。

  1. SKPayment *payment = [SKPayment paymentWithProductIdentifier: kMyFeatureIdentifier];  
  2. [[SKPaymentQueue defaultQueue] addPayment: payment]; 

如果你的商店支持选择同一件商品的数量,你可以设置支付对象的quantity属性

  1. SKMutablePayment *payment = [SKMutablePayment paymentWithProductIdentifier: kMyFeatureIdentifier];  
  2. payment.quantity = 3;  
  3. [[SKPaymentQueue defaultQueue] addPayment: payment]; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值