3

I'm developing an app that offers auto-renewing subscriptions.

I do not know how the JSON response from Apple will look like when validating the receipt hash if a user has purchased subscription.A (which renews after 7 days), and then goes to his iTunes settings and changes it to renew into subscription.B from the same subscription family.

For subscription.A it will look like this after renewing a couple of times:

...
{"quantity":"1", "product_id":"subscription.A", "transaction_id":"100000015494389", "original_transaction_id":"100000015494368", "purchase_date":"2015-05-12 11:42:01 Etc/GMT", "purchase_date_ms":"1431430921000", "purchase_date_pst":"2015-05-12 04:42:01 America/Los_Angeles", "original_purchase_date":"2015-05-12 11:40:03 Etc/GMT", "original_purchase_date_ms":"1431430803000", "original_purchase_date_pst":"2015-05-12 04:40:03 America/Los_Angeles", "expires_date":"2015-05-12 11:47:01 Etc/GMT", "expires_date_ms":"1431431221000", "expires_date_pst":"2015-05-12 04:47:01 America/Los_Angeles", "web_order_line_item_id":"100000002973145", "is_trial_period":"false"}, 
{"quantity":"1", "product_id":"subscription.A", "transaction_id":"100000015494368", "original_transaction_id":"100000015494368", "purchase_date":"2015-05-12 11:37:01 Etc/GMT", "purchase_date_ms":"1431430621000", "purchase_date_pst":"2015-05-12 04:37:01 America/Los_Angeles", "original_purchase_date":"2015-05-12 11:37:02 Etc/GMT", "original_purchase_date_ms":"1431430622000", "original_purchase_date_pst":"2015-05-12 04:37:02 America/Los_Angeles", "expires_date":"2015-05-12 11:42:01 Etc/GMT", "expires_date_ms":"1431430921000", "expires_date_pst":"2015-05-12 04:42:01 America/Los_Angeles", "web_order_line_item_id":"100000002973145", "is_trial_period":"false"}, 
{"quantity":"1", "product_id":"subscription.A", "transaction_id":"100000015494496", "original_transaction_id":"100000015494368", "purchase_date":"2015-05-12 11:47:01 Etc/GMT", "purchase_date_ms":"1431431221000", "purchase_date_pst":"2015-05-12 04:47:01 America/Los_Angeles", "original_purchase_date":"2015-05-12 11:45:32 Etc/GMT", "original_purchase_date_ms":"1431431132000", "original_purchase_date_pst":"2015-05-12 04:45:32 America/Los_Angeles", "expires_date":"2015-05-12 11:52:01 Etc/GMT", "expires_date_ms":"1431431521000", "expires_date_pst":"2015-05-12 04:52:01 America/Los_Angeles", "web_order_line_item_id":"100000002973147", "is_trial_period":"false"}, 
{"quantity":"1", "product_id":"subscription.A", "transaction_id":"100000015494517", "original_transaction_id":"100000015494368", "purchase_date":"2015-05-12 11:52:01 Etc/GMT", "purchase_date_ms":"1431431521000", "purchase_date_pst":"2015-05-12 04:52:01 America/Los_Angeles", "original_purchase_date":"2015-05-12 11:50:11 Etc/GMT", "original_purchase_date_ms":"1431431411000", "original_purchase_date_pst":"2015-05-12 04:50:11 America/Los_Angeles", "expires_date":"2015-05-12 11:57:01 Etc/GMT", "expires_date_ms":"1431431821000", "expires_date_pst":"2015-05-12 04:57:01 America/Los_Angeles", "web_order_line_item_id":"100000002973149", "is_trial_period":"false"}, 
{"quantity":"1", "product_id":"subscription.A", "transaction_id":"100000015494558", "original_transaction_id":"100000015494368", "purchase_date":"2015-05-12 11:57:01 Etc/GMT", "purchase_date_ms":"1431431821000", "purchase_date_pst":"2015-05-12 04:57:01 America/Los_Angeles", "original_purchase_date":"2015-05-12 11:55:03 Etc/GMT", "original_purchase_date_ms":"1431431703000", "original_purchase_date_pst":"2015-05-12 04:55:03 America/Los_Angeles", "expires_date":"2015-05-12 12:02:01 Etc/GMT", "expires_date_ms":"1431432121000", "expires_date_pst":"2015-05-12 05:02:01 America/Los_Angeles", "web_order_line_item_id":"100000002973151", "is_trial_period":"false"}, 
{"quantity":"1", "product_id":"subscription.A", "transaction_id":"100000015494630", "original_transaction_id":"100000015494368", "purchase_date":"2015-05-12 12:02:01 Etc/GMT", "purchase_date_ms":"1431432121000", "purchase_date_pst":"2015-05-12 05:02:01 America/Los_Angeles", "original_purchase_date":"2015-05-12 12:00:29 Etc/GMT", "original_purchase_date_ms":"1431432029000", "original_purchase_date_pst":"2015-05-12 05:00:29 America/Los_Angeles", "expires_date":"2015-05-12 12:07:01 Etc/GMT", "expires_date_ms":"1431432421000", "expires_date_pst":"2015-05-12 05:07:01 America/Los_Angeles", "web_order_line_item_id":"100000002973153", "is_trial_period":"false"}, 
...

When the subscription extends to a different duration, I think it'll of course have product_id subscription.B, but will it have a new original_transaction_id, or will that still be connected to (in this case) 100000015494368?

Since I cannot access the iTunes settings with sandbox test users, I have no idea how to test it, and I couldn't find a clear statement it in the documentation.

NobodyNada
  • 7,529
  • 6
  • 44
  • 51

1 Answers1

0

Below is how two purchases of auto-renewing subscriptions with different durations appear in the receipt validation response:

{"quantity":"1", "product_id":"subscription.A", "transaction_id":"1000000276920213", "original_transaction_id":"1000000276916420", "purchase_date":"2017-02-25 14:34:05 Etc/GMT", "purchase_date_ms":"1488033245000", "purchase_date_pst":"2017-02-25 06:34:05 America/Los_Angeles", "original_purchase_date":"2017-02-25 13:03:10 Etc/GMT", "original_purchase_date_ms":"1488027790000", "original_purchase_date_pst":"2017-02-25 05:03:10 America/Los_Angeles", "expires_date":"2017-02-25 14:39:05 Etc/GMT", "expires_date_ms":"1488033545000", "expires_date_pst":"2017-02-25 06:39:05 America/Los_Angeles", "web_order_line_item_id":"1000000034442002", "is_trial_period":"false"}, 
{"quantity":"1", "product_id":"subscription.B", "transaction_id":"1000000276964864", "original_transaction_id":"1000000276916420", "purchase_date":"2017-02-26 09:05:14 Etc/GMT", "purchase_date_ms":"1488099914000", "purchase_date_pst":"2017-02-26 01:05:14 America/Los_Angeles", "original_purchase_date":"2017-02-25 13:03:10 Etc/GMT", "original_purchase_date_ms":"1488027790000", "original_purchase_date_pst":"2017-02-25 05:03:10 America/Los_Angeles", "expires_date":"2017-02-26 09:08:14 Etc/GMT", "expires_date_ms":"1488100094000", "expires_date_pst":"2017-02-26 01:08:14 America/Los_Angeles", "web_order_line_item_id":"1000000034442107", "is_trial_period":"false"}

As you can see, they do appear as connected, sharing the same original_transaction_id and original_purchase_date. I'm not 100% sure, but I think this is the case even if the second subscription was purchased after the first one was cancelled.

Şafak Gezer
  • 3,928
  • 3
  • 47
  • 49