Ios8 应用程序内消费品采购验证

Ios8 应用程序内消费品采购验证,ios8,in-app-purchase,receipt-validation,skproduct,Ios8,In App Purchase,Receipt Validation,Skproduct,我们最近推出了一款应用,它只提供可消费的应用内购买。我们注意到很多虚假购买——购买时有无效收据,也有“有效”收据,但苹果验证响应中的“in_app”数组是空数组。我需要知道用户是如何形成这样的“有效”收据的?是应用下载的收据,而不是应用内购买的收据还是什么?我现在进行以下检查以进行验证。从Apple提取json响应中的“in_app”字段,如果该字段为非空,则检查产品id是否匹配。我需要知道这张支票是否足够,或者他们的支票是否更好。所有应用程序都有收据。那些购买了IAP的应用在其收据中有一个in

我们最近推出了一款应用,它只提供可消费的应用内购买。我们注意到很多虚假购买——购买时有无效收据,也有“有效”收据,但苹果验证响应中的“in_app”数组是空数组。我需要知道用户是如何形成这样的“有效”收据的?是应用下载的收据,而不是应用内购买的收据还是什么?我现在进行以下检查以进行验证。从Apple提取json响应中的“in_app”字段,如果该字段为非空,则检查产品id是否匹配。我需要知道这张支票是否足够,或者他们的支票是否更好。所有应用程序都有收据。那些购买了IAP的应用在其收据中有一个in_应用字段。您的用户正在向他们的updatedTransaction方法中推送一个假呼叫,而您正在抓取他们的收据(无IAP,因为他们没有购买),并将其发送到您的服务器。其他用户可能会从某处交换一些收据(例如,30个小偷中的一个进行购买,提取有效收据并将其发送给他们的29个同伙)。如果他们将收据粘贴到设备中,然后向updatedTransactions推送一个调用,那么您的服务器将获得现在有效但重复的收据。您的服务器需要检查***收据的日期,发现它比最近的日期旧,或者比您需要共同发送到服务器的paymentRequest更旧。(最好在设备上解码-更安全)


***您以前可以检查事务\u id以查找重复的事务\u id。不幸的是,您无法再执行此操作,因为restoreCompletedTransaction返回的事务\u id与原始购买的相同。我已经告诉苹果了,但他们不理我。

请参阅此应用程序内购买常见问题解答

in_应用程序数组为空表示应用程序商店尚未录制 尚未为用户创建任何事务。可能是应用程序 收据尚未更新。当这种情况发生时,您的应用程序可以 通知用户收据不是最新的,并询问 是否刷新它

在以下情况下,耗材信息会添加到收据中: 它们已付款并保留在收据中,直到您完成付款 交易完成交易后,此信息将被删除 下次更新收据时删除。从而导致 如果您的应用程序仅销售耗材,则应用程序数组中为空


我刚刚意识到,对于耗材,您可以检查重复的交易id并拒绝它。谢谢。我发现“原始交易id”是赌注。@PeterB.Kramer如果grand unified Receive拥有用户的整个购买历史记录,您如何判断哪个交易是与当前购买关联的交易!?总收据有一个创建日期字段,IAP特定部分有一个购买日期。如果它们相似,则IAP是与刷新该收据一起购买的。您的应用程序有一个名为updatedTransactions的方法,该方法提供一个transaction.payment.productIdentifier,用于标识刚购买或还原的产品。