Multiple products returned for verifyReceipt

We have two in-app purchase products which are appadfree and promonthly on our app, and they are under the same Subscription Groups.


From our server logs, we've noticed that some of the verifyReceipt call to Apple are returning multiple products for the smae receipt-data, why is this happening? Is it possible that same receipt-data can be reused for different product purchase?


Here is the part of response from Apple.


"latest_receipt_info":[

{

"quantity":"1",
"product_id":" appadfree",
"transaction_id":"340000472103068",
"original_transaction_id":"340000236029130",
"purchase_date":"2020-05-05 13:52:49 Etc/GMT",
"purchase_date_ms":"1588686769000",
"purchase_date_pst":"2020-05-05 06:52:49 America/Los_Angeles",
"original_purchase_date":"2018-04-30 03:52:49 Etc/GMT",
"original_purchase_date_ms":"1525060369000",
"original_purchase_date_pst":"2018-04-29 20:52:49 America/Los_Angeles",
"expires_date":"2021-05-05 13:52:49 Etc/GMT",
"expires_date_ms":"1620222769000",
"expires_date_pst":"2021-05-05 06:52:49 America/Los_Angeles",
"web_order_line_item_id":"340000103912893",
"is_trial_period":"false",
"is_in_intro_offer_period":"false",
"subscription_group_identifier":"20421569"



},
{

"quantity":"1",
"product_id":"appadfree",
"transaction_id":"340000337006404",
"original_transaction_id":"340000236029130",
"purchase_date":"2019-05-05 13:52:49 Etc/GMT",
"purchase_date_ms":"1557064369000",
"purchase_date_pst":"2019-05-05 06:52:49 America/Los_Angeles",
"original_purchase_date":"2018-04-30 03:52:49 Etc/GMT",
"original_purchase_date_ms":"1525060369000",
"original_purchase_date_pst":"2018-04-29 20:52:49 America/Los_Angeles",
"expires_date":"2020-05-05 13:52:49 Etc/GMT",
"expires_date_ms":"1588686769000",
"expires_date_pst":"2020-05-05 06:52:49 America/Los_Angeles",
"web_order_line_item_id":"340000102936468",
"is_trial_period":"false",
"is_in_intro_offer_period":"false",
"subscription_group_identifier":"20421569"


},
{

"quantity":"1",
"product_id":"promonthly",
"transaction_id":"340000335202119",
"original_transaction_id":"340000236029130",
"purchase_date":"2019-04-30 03:52:49 Etc/GMT",
"purchase_date_ms":"1556596369000",
"purchase_date_pst":"2019-04-29 20:52:49 America/Los_Angeles",
"original_purchase_date":"2018-04-30 03:52:49 Etc/GMT",
"original_purchase_date_ms":"1525060369000",
"original_purchase_date_pst":"2018-04-29 20:52:49 America/Los_Angeles",
"expires_date":"2019-05-30 03:52:49 Etc/GMT",
"expires_date_ms":"1559188369000",
"expires_date_pst":"2019-05-29 20:52:49 America/Los_Angeles",
"cancellation_date":"2019-05-06 01:54:14 Etc/GMT",
"cancellation_date_ms":"1557107654000",
"cancellation_date_pst":"2019-05-05 18:54:14 America/Los_Angeles",
"web_order_line_item_id":"340000098219808",
"is_trial_period":"false",
"is_in_intro_offer_period":"false",
"cancellation_reason":"0",
"subscription_group_identifier":"20421569",
"is_upgraded":"true"


},
{

"quantity":"1",
"product_id":"promonthly",
"transaction_id":"340000326314745",
"original_transaction_id":"340000236029130",
"purchase_date":"2019-03-30 03:52:49 Etc/GMT",
"purchase_date_ms":"1553917969000",
"purchase_date_pst":"2019-03-29 20:52:49 America/Los_Angeles",
"original_purchase_date":"2018-04-30 03:52:49 Etc/GMT",
"original_purchase_date_ms":"1525060369000",
"original_purchase_date_pst":"2018-04-29 20:52:49 America/Los_Angeles",
"expires_date":"2019-04-30 03:52:49 Etc/GMT",
"expires_date_ms":"1556596369000",
"expires_date_pst":"2019-04-29 20:52:49 America/Los_Angeles",
"web_order_line_item_id":"340000093846256",
"is_trial_period":"false",
"is_in_intro_offer_period":"false",
"subscription_group_identifier":"20421569"


},

.... ...

A receipt contains all of the earlier purchases. Your receipt lists the following different purchases all from the same original subscription purchase (they all share the same original_transaction_id going back to April 2018):


appadfree "purchase_date":"2020-05-05 13:52:49 Etc/GMT",

appadfree "purchase_date":"2019-05-05 13:52:49 Etc/GMT", (different web_order_line_item_id)

promontly "purchase_date":"2019-04-30 03:52:49 Etc/GMT",

then cancelled on "cancellation_date":"2019-05-06 01:54:14 Etc/GMT",

promonthly "purchase_date":"2019-03-30 03:52:49 Etc/GMT",


On May 5 the promonthly was converted to appadfree and two ( ! ) transactions generated for an apadfree subscription. The next day, May 6, the current promonthly subscription was cancelled, I think becasue the subscription was converted to apadree.


What may be unusual is that the system seems to have generated two purchase receipts that are renewals of the same original_transaction_id (with different web_order_line_item_id) at exactly the same time when the subscription was converted from promontly to appadfree.

Multiple products returned for verifyReceipt
 
 
Q