iOS在应用内购买:请求最新取消日期和取消次数

时间:2017-11-18 16:56:25

标签: ios iphone in-app-purchase

我正在使用iOS In-App Purchase。

我想要求最新的取消日期和取消总数,最好是100%正确的结果。

我正在使用Apple的verifyreceipt调用

(
https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1 
-> 
https://sandbox.itunes.apple.com/verifyReceipt 
/ 
https://buy.itunes.apple.com/verifyReceipt 
JSON response field descriptions : https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW25
) .

JSON响应具有以下格式:

(lldb) po jsonResponse
{
    environment = Sandbox;
    "latest_receipt" = "<some binary text>";
    "latest_receipt_info" =     (
                {
            "expires_date" = "2017-11-17 15:41:31 Etc/GMT";
            "expires_date_ms" = 1510933291000;
            "expires_date_pst" = "2017-11-17 07:41:31 America/Los_Angeles";
            "is_trial_period" = true;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-17 14:41:31 Etc/GMT";
            "purchase_date_ms" = 1510929691000;
            "purchase_date_pst" = "2017-11-17 06:41:31 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353161868;
            "web_order_line_item_id" = 1000000036932780;
        },
                {
            "expires_date" = "2017-11-17 15:46:31 Etc/GMT";
            "expires_date_ms" = 1510933591000;
            "expires_date_pst" = "2017-11-17 07:46:31 America/Los_Angeles";
            "is_trial_period" = false;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-17 15:41:31 Etc/GMT";
            "purchase_date_ms" = 1510933291000;
            "purchase_date_pst" = "2017-11-17 07:41:31 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353176570;
            "web_order_line_item_id" = 1000000036932781;
        },
                {
            "expires_date" = "2017-11-17 15:51:31 Etc/GMT";
            "expires_date_ms" = 1510933891000;
            "expires_date_pst" = "2017-11-17 07:51:31 America/Los_Angeles";
            "is_trial_period" = false;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-17 15:46:31 Etc/GMT";
            "purchase_date_ms" = 1510933591000;
            "purchase_date_pst" = "2017-11-17 07:46:31 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353177515;
            "web_order_line_item_id" = 1000000036933429;
        },
                {
            "expires_date" = "2017-11-17 15:56:31 Etc/GMT";
            "expires_date_ms" = 1510934191000;
            "expires_date_pst" = "2017-11-17 07:56:31 America/Los_Angeles";
            "is_trial_period" = false;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-17 15:51:31 Etc/GMT";
            "purchase_date_ms" = 1510933891000;
            "purchase_date_pst" = "2017-11-17 07:51:31 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353178539;
            "web_order_line_item_id" = 1000000036933488;
        },
                {
            "expires_date" = "2017-11-17 16:01:31 Etc/GMT";
            "expires_date_ms" = 1510934491000;
            "expires_date_pst" = "2017-11-17 08:01:31 America/Los_Angeles";
            "is_trial_period" = false;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-17 15:56:31 Etc/GMT";
            "purchase_date_ms" = 1510934191000;
            "purchase_date_pst" = "2017-11-17 07:56:31 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353179673;
            "web_order_line_item_id" = 1000000036933554;
        },
                {
            "expires_date" = "2017-11-17 16:06:31 Etc/GMT";
            "expires_date_ms" = 1510934791000;
            "expires_date_pst" = "2017-11-17 08:06:31 America/Los_Angeles";
            "is_trial_period" = false;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-17 16:01:31 Etc/GMT";
            "purchase_date_ms" = 1510934491000;
            "purchase_date_pst" = "2017-11-17 08:01:31 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353180672;
            "web_order_line_item_id" = 1000000036933616;
        },
                {
            "expires_date" = "2017-11-18 16:03:15 Etc/GMT";
            "expires_date_ms" = 1511020995000;
            "expires_date_pst" = "2017-11-18 08:03:15 America/Los_Angeles";
            "is_trial_period" = false;
            "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
            "original_purchase_date_ms" = 1510929694000;
            "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "purchase_date" = "2017-11-18 15:58:15 Etc/GMT";
            "purchase_date_ms" = 1511020695000;
            "purchase_date_pst" = "2017-11-18 07:58:15 America/Los_Angeles";
            quantity = 1;
            "transaction_id" = 1000000353294875;
            "web_order_line_item_id" = 1000000036933659;
        }
    );
    "pending_renewal_info" =     (
                {
            "auto_renew_product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
            "auto_renew_status" = 1;
            "original_transaction_id" = 1000000353161868;
            "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
        }
    );
    receipt =     {
        "adam_id" = 0;
        "app_item_id" = 0;
        "application_version" = 759;
        "bundle_id" = "com.myapp";
        "download_id" = 0;
        "in_app" =         (
                        {
                "expires_date" = "2017-11-17 15:46:31 Etc/GMT";
                "expires_date_ms" = 1510933591000;
                "expires_date_pst" = "2017-11-17 07:46:31 America/Los_Angeles";
                "is_trial_period" = false;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-17 15:41:31 Etc/GMT";
                "purchase_date_ms" = 1510933291000;
                "purchase_date_pst" = "2017-11-17 07:41:31 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353176570;
                "web_order_line_item_id" = 1000000036932781;
            },
                        {
                "expires_date" = "2017-11-17 15:51:31 Etc/GMT";
                "expires_date_ms" = 1510933891000;
                "expires_date_pst" = "2017-11-17 07:51:31 America/Los_Angeles";
                "is_trial_period" = false;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-17 15:46:31 Etc/GMT";
                "purchase_date_ms" = 1510933591000;
                "purchase_date_pst" = "2017-11-17 07:46:31 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353177515;
                "web_order_line_item_id" = 1000000036933429;
            },
                        {
                "expires_date" = "2017-11-17 15:56:31 Etc/GMT";
                "expires_date_ms" = 1510934191000;
                "expires_date_pst" = "2017-11-17 07:56:31 America/Los_Angeles";
                "is_trial_period" = false;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-17 15:51:31 Etc/GMT";
                "purchase_date_ms" = 1510933891000;
                "purchase_date_pst" = "2017-11-17 07:51:31 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353178539;
                "web_order_line_item_id" = 1000000036933488;
            },
                        {
                "expires_date" = "2017-11-17 16:01:31 Etc/GMT";
                "expires_date_ms" = 1510934491000;
                "expires_date_pst" = "2017-11-17 08:01:31 America/Los_Angeles";
                "is_trial_period" = false;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-17 15:56:31 Etc/GMT";
                "purchase_date_ms" = 1510934191000;
                "purchase_date_pst" = "2017-11-17 07:56:31 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353179673;
                "web_order_line_item_id" = 1000000036933554;
            },
                        {
                "expires_date" = "2017-11-17 16:06:31 Etc/GMT";
                "expires_date_ms" = 1510934791000;
                "expires_date_pst" = "2017-11-17 08:06:31 America/Los_Angeles";
                "is_trial_period" = false;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-17 16:01:31 Etc/GMT";
                "purchase_date_ms" = 1510934491000;
                "purchase_date_pst" = "2017-11-17 08:01:31 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353180672;
                "web_order_line_item_id" = 1000000036933616;
            },
                        {
                "expires_date" = "2017-11-18 16:03:15 Etc/GMT";
                "expires_date_ms" = 1511020995000;
                "expires_date_pst" = "2017-11-18 08:03:15 America/Los_Angeles";
                "is_trial_period" = false;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-18 15:58:15 Etc/GMT";
                "purchase_date_ms" = 1511020695000;
                "purchase_date_pst" = "2017-11-18 07:58:15 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353294875;
                "web_order_line_item_id" = 1000000036933659;
            },
                        {
                "expires_date" = "2017-11-17 15:41:31 Etc/GMT";
                "expires_date_ms" = 1510933291000;
                "expires_date_pst" = "2017-11-17 07:41:31 America/Los_Angeles";
                "is_trial_period" = true;
                "original_purchase_date" = "2017-11-17 14:41:34 Etc/GMT";
                "original_purchase_date_ms" = 1510929694000;
                "original_purchase_date_pst" = "2017-11-17 06:41:34 America/Los_Angeles";
                "original_transaction_id" = 1000000353161868;
                "product_id" = "com.myapp.iap.pro.renewing.monthly.trial";
                "purchase_date" = "2017-11-17 14:41:31 Etc/GMT";
                "purchase_date_ms" = 1510929691000;
                "purchase_date_pst" = "2017-11-17 06:41:31 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000353161868;
                "web_order_line_item_id" = 1000000036932780;
            }
        );
        "original_application_version" = "1.0";
        "original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
        "original_purchase_date_ms" = 1375340400000;
        "original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
        "receipt_creation_date" = "2017-11-18 15:58:18 Etc/GMT";
        "receipt_creation_date_ms" = 1511020698000;
        "receipt_creation_date_pst" = "2017-11-18 07:58:18 America/Los_Angeles";
        "receipt_type" = ProductionSandbox;
        "request_date" = "2017-11-18 15:58:23 Etc/GMT";
        "request_date_ms" = 1511020703927;
        "request_date_pst" = "2017-11-18 07:58:23 America/Los_Angeles";
        "version_external_identifier" = 0;
    };
    status = 0;
}

我认为没有办法从此回复中提取“取消次数”信息。有什么办法吗?例如,可能使用不同的请求?

我看到我可以通过检查“pending_renewal_info”的值来获取“最新取消日期”:“auto_renew_status”== 0并迭代收据数组并获取最新的截止日期(可能会添加安全检查)它小于当前日期)。 但是:我认为这个解决方案没有给出100%正确的结果,因为: 如果用户已取消订阅并在应用程序外续订而未启动应用程序,我的应用程序将无法识别该取消。 有没有办法要求这些信息?

1 个答案:

答案 0 :(得分:2)

您应该能够通过循环所有收据,致电验证以及检查pending_renewal_info所有您关注的产品来计算取消总数。

此方法在调用时为您提供正确的结果。 pending_renewal_info实际上不是收据的固有内容,但Apple的服务器会返回最新信息。因此,如果用户取消,这将反映在此处。事实上,当用户取消时,收据本身根本不会改变,而您的应用程序不会收到任何新的交易,唯一的方法就是点击verifyReceipt端点。

如果您想查看单个用户取消的次数,则无法通过pending_renewal_info获取此信息。您需要查看latest_receipt_info字段中的各个交易,并对purchase_dateexpires_date和产品的持续时间进行比较,以查找用户订阅中的差距。如果有超过几天的差距,您应该可以考虑取消期限。