如何使用Apples Receipt Validation Endpoint查看非消费类应用内购买是否有效

Bue*_*eno 6 transactions objective-c in-app-purchase ios receipt-validation

我最近根据Apples文档设置了一项服务来验证和记录我的iOS购买 .经过一些购买后,我查看了我的桌子,发现我有45次购买,状态代码为0,根据Apple的文档,这意味着它们是有效的.问题是,当我登录我的iTunes帐户时,它只记录了22次有效购买.仔细检查Apple的JSON响应状态为0后,我发现了两个变体:

{
    "status": 0,
    "environment": "Production",
    "receipt": {
        "receipt_type": "Production",
        "adam_id": 888310447,
        "app_item_id": 888310447,
        "bundle_id": "com.studioName.gameName",
        "application_version": "1.4",
        "download_id": 62010318102259,
        "version_external_identifier": 810789159,
        "request_date": "2014-12-16 15:34:17 Etc/GMT",
        "request_date_ms": "1418744057267",
        "request_date_pst": "2014-12-16 07:34:17 America/Los_Angeles",
        "original_purchase_date": "2014-07-08 18:04:28 Etc/GMT",
        "original_purchase_date_ms": "1404842668000",
        "original_purchase_date_pst": "2014-07-08 11:04:28 America/Los_Angeles",
        "original_application_version": "1.1",
        "in_app": []
    }
}
Run Code Online (Sandbox Code Playgroud)
{
    "status": 0,
    "environment": "Production",
    "receipt": {
        "receipt_type": "Production",
        "adam_id": 888310447,
        "app_item_id": 888310447,
        "bundle_id": "com.studioName.gameName",
        "application_version": "1.4",
        "download_id": 39011903209949,
        "version_external_identifier": 810789159,
        "request_date": "2014-12-16 15:11:10 Etc/GMT",
        "request_date_ms": "1418742670718",
        "request_date_pst": "2014-12-16 07:11:10 America/Los_Angeles",
        "original_purchase_date": "2014-10-15 05:52:28 Etc/GMT",
        "original_purchase_date_ms": "1413352348000",
        "original_purchase_date_pst": "2014-10-14 22:52:28 America/Los_Angeles",
        "original_application_version": "1.2.4",
        "in_app": [
            {
                "quantity": "1",
                "product_id": "com.studioName.gameName.productName",
                "transaction_id": "190000148450370",
                "original_transaction_id": "190000148450370",
                "purchase_date": "2014-11-29 08:22:49 Etc/GMT",
                "purchase_date_ms": "1417249369000",
                "purchase_date_pst": "2014-11-29 00:22:49 America/Los_Angeles",
                "original_purchase_date": "2014-10-17 08:30:26 Etc/GMT",
                "original_purchase_date_ms": "1413534626000",
                "original_purchase_date_pst": "2014-10-17 01:30:26 America/Los_Angeles",
                "is_trial_period": "false"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,应用程序内数组中的第一个对象为空,而第二个对象实际上具有IAP的收据.我的假设是我应该查看已填充应用程序内数组的收据.我现在的问题是,我已经解析了没有应用程序内阵列的收据,我仍然剩下25次有效购买(比Apple记录的多3次).

我的下一个想法是,这些购买中的一些可能是恢复.我在收据验证编程指南中找到了这个注释.它在原始事务标识符下声明:

"对于恢复先前事务的事务,原始事务的事务标识符.否则,与事务标识符相同."

在我检查了所有有效收据之后,我发现没有任何情况,original_transaction_id而且transaction_id不同.就此而言,我做了一个重复的购买,它给了我提示,该项目已经被购买,并询问我是否想要免费恢复它.当我这样做并检查收据时,我发现即使在这种情况下,两个交易ID也是相同的,不应该是这种情况.

当我进行调查时,我收到一个预制回复,告诉我itunes的IAP部分工作正常.如果有人可以帮助阐明如何更好地过滤这些以匹配苹果最终的IAP数量,我将不胜感激!