首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果iOS购买收据验证失败怎么办?

如果iOS购买收据验证失败怎么办?
EN

Stack Overflow用户
提问于 2012-07-02 02:59:56
回答 1查看 5.1K关注 0票数 10

iOS购买收据服务器验证通常如下所示:

  1. 用户在iPhone上的购买
  2. 您的应用程序将购买食谱发送到服务器。
  3. 服务器接收菜谱并将其发送给Apple以验证
  4. 服务器从Apple获得验证结果。
  5. 服务器将验证结果发送到app。

但是,如果第一步成功了呢?例如,在步骤2中,应用程序无法向服务器发送请求,或者在步骤5中,应用程序无法从服务器获得响应,问题是用户已经付费。处理这个问题的最好方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-04-24 02:10:03

如果您正在使用SKPaymentQueue,,那么这很容易。您所要做的就是让将事务保存在SKPaymentQueue中,直到“步骤5”,当您从服务器获得成功/失败验证结果时为止。

如果出了什么问题,那么在第1步到第5步之间,仍然可以访问SKPaymentQueue中的事务,并且可以“重新处理”。

不完全事务的再处理可能会在应用程序开始时启动,(或您喜欢的某个时间间隔)。

只需检查SKPaymentQueue以获得未决/不完全事务并将它们发送到服务器(就像'step 2')。如果您的服务器仍然无法访问,显然您将无法进入第5步,因此您不会从队列中删除事务,并且每次在下一个应用程序启动(或下一个队列检查时间间隔)时,这个重新处理都会一次又一次地发生,直到实现为止。

实现

实现也很简单,您需要一个SKPaymentTransactionObserver.的‘事务观察器类’。

在app start中,创建一个‘事务观察者类’的实例,它应该通过调用:

代码语言:javascript
复制
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]

然后'transaction观察者类‘获取方法中的事务:

代码语言:javascript
复制
(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

在这个方法中,可以处理和重新处理所有不完整的事务。

请注意,您的服务器必须是幂等(即,如果已处理重复事务,则能够处理这些事务)。

一旦服务器处理并完成了步骤2至4,然后就会出现具有成功/失败结果的app,这是--当您想要通过调用从队列中删除该事务时,是唯一的:

代码语言:javascript
复制
[[SKPaymentQueue defaultQueue] finishTransaction: transaction]

最后,给你的用户提供他们在这一点上购买的优质功能。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11287352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档