bizz84 / bizz84/SwiftyStoreKit

Major glitch - Even subscription is expired, it gives as purchased (when subscription is upgraded to different subscription in subscription group)

Open
#667 0 comments 1 reaction 0 assignees View on GitHub
type: bug
Dominant language
Swift
Stars
6.7k
Forks
801
PR merge metrics
No merged PRs in 30d

Description

## Bug Report
Steps:
1. Purchased free trial of product (yearly subscription) "#####.premiumyearly" on 15th July 2021
2. Cancelled free trial and free trial expired on 18th July 2021
3. On 30 Sept 2021, purchase yearly subscription "#####.premiumyearly" which will expire on 30 sept, 2022.
4. Upgraded plan to monthly "#####. premiumMonthly" and it refunded yearly cost and charged monthly cost
5. Cancelled monthly subscription which expired on 30th Oct 2021.
6. But when try to validate, it is giving "#####.premiumyearly" as purchased. It should not give as purchased. (Shared receipt info as below)

**To Reproduce**
Difficult steps to reproduce, also not sure it is possible to reproduce in Development environment. But I have reproduced in production environment.

Fetched production receipt as below:
"latest_receipt_info" = (
{
"expires_date" = "2021-10-30 13:32:34 Etc/GMT";
"expires_date_ms" = 1635600754000;
"expires_date_pst" = "2021-10-30 06:32:34 America/Los_Angeles";
"in_app_ownership_type" = PURCHASED;
"is_in_intro_offer_period" = false;
"is_trial_period" = false;
"original_purchase_date" = "2021-07-15 17:31:35 Etc/GMT";
"original_purchase_date_ms" = 1626370295000;
"original_purchase_date_pst" = "2021-07-15 10:31:35 America/Los_Angeles";
"original_transaction_id" = 470000915211472;
"product_id" = "#####.premiumMonthly";
"purchase_date" = "2021-09-30 13:32:34 Etc/GMT";
"purchase_date_ms" = 1633008754000;
"purchase_date_pst" = "2021-09-30 06:32:34 America/Los_Angeles";
quantity = 1;
"subscription_group_identifier" = 20801591;
"transaction_id" = 470000976080132;
"web_order_line_item_id" = 470000423256270;
},
{
"expires_date" = "2022-09-30 13:30:15 Etc/GMT";
"expires_date_ms" = 1664544615000;
"expires_date_pst" = "2022-09-30 06:30:15 America/Los_Angeles";
"in_app_ownership_type" = PURCHASED;
"is_in_intro_offer_period" = false;
"is_trial_period" = false;
"is_upgraded" = true;
"original_purchase_date" = "2021-07-15 17:31:35 Etc/GMT";
"original_purchase_date_ms" = 1626370295000;
"original_purchase_date_pst" = "2021-07-15 10:31:35 America/Los_Angeles";
"original_transaction_id" = 470000915211472;
"product_id" = "#####.premiumyearly";
"purchase_date" = "2021-09-30 13:30:15 Etc/GMT";
"purchase_date_ms" = 1633008615000;
"purchase_date_pst" = "2021-09-30 06:30:15 America/Los_Angeles";
quantity = 1;
"subscription_group_identifier" = 20801591;
"transaction_id" = 470000976078370;
"web_order_line_item_id" = 470000391458152;
},
{
"expires_date" = "2021-07-18 17:31:35 Etc/GMT";
"expires_date_ms" = 1626629495000;
"expires_date_pst" = "2021-07-18 10:31:35 America/Los_Angeles";
"in_app_ownership_type" = PURCHASED;
"is_in_intro_offer_period" = false;
"is_trial_period" = true;
"original_purchase_date" = "2021-07-15 17:31:35 Etc/GMT";
"original_purchase_date_ms" = 1626370295000;
"original_purchase_date_pst" = "2021-07-15 10:31:35 America/Los_Angeles";
"original_transaction_id" = 470000915211472;
"product_id" = "#####.premiumyearly";
"purchase_date" = "2021-07-15 17:31:35 Etc/GMT";
"purchase_date_ms" = 1626370295000;
"purchase_date_pst" = "2021-07-15 10:31:35 America/Los_Angeles";
quantity = 1;
"subscription_group_identifier" = 20801591;
"transaction_id" = 470000915211472;
"web_order_line_item_id" = 470000391458151;
}
);

**Expected behavior**
if yearly subscription is switched to monthly subscription, it gives "is_upgraded" field in receipt. So when verity subscription, it should give as subscription expired or some different state instead of subscription purchased.

## Platform Information
- OS: iOS 15.1
- Purchase Type: auto-renewable subscription
- Environment: production
- SwiftyStoreKit version: 0.16.3

## Additional context
Found that in latest commit there is "is_upgraded" field is used, but it is not considering that field anywhere and it gives as purchased instead of expired or some other state.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.