Подтверждение получения подписки дает неправильный product_id и expires_date при восстановлении - PullRequest
0 голосов
/ 20 января 2019

Я работаю над подтверждением квитанции для подписки с автоматическим продлением. Встреча с большой проблемой, когда дело доходит до восстановления. Восстановление, похоже, восстанавливает старую транзакцию с другим product_id, поэтому мой пользовательский интерфейс помечен как просроченный.

Покупка работает отлично.

Вот ответ JSON, когда я делаю покупку:

LAST RECEIPT INFORMATION: 
 {
    "expires_date" = "2019-01-20 18:29:02 Etc/GMT";
    "expires_date_ms" = 1548008942000;
    "expires_date_pst" = "2019-01-20 10:29:02 America/Los_Angeles";
    "is_in_intro_offer_period" = false;
    "is_trial_period" = false;
    "original_purchase_date" = "2019-01-20 18:26:03 Etc/GMT";
    "original_purchase_date_ms" = 1548008763000;
    "original_purchase_date_pst" = "2019-01-20 10:26:03 America/Los_Angeles";
    "original_transaction_id" = 1000000484645981;
    "product_id" = "com.mywebsite.weekly"; // The CORRECT product_id of what I am purchasing in sandbox.
    "purchase_date" = "2019-01-20 18:26:02 Etc/GMT";
    "purchase_date_ms" = 1548008762000;
    "purchase_date_pst" = "2019-01-20 10:26:02 America/Los_Angeles";
    quantity = 1;
    "transaction_id" = 1000000495942050;
    "web_order_line_item_id" = 1000000042313304;
}

   - DATE BOUGHT SUBSCRIPTION = 2019-01-20 18:26:03 +0000


   - DATE SUBSCRIPTION EXPIRES = 2019-01-20 18:29:02 +0000

Вы можете видеть, что разница между "original_purchase_date" = "2019-01-20 18:26:03 Etc/GMT"; и "expires_date" = "2019-01-20 18:29:02 Etc/GMT"; составляет 3 минуты, как это должно быть в песочнице для недельной подписки.

Теперь приходит проблема .. Когда я восстанавливаю, ИЛИ , когда я повторно покупаю тот же продукт (и получаю сообщение, что StoreKit уже подписан на него), я получаю совершенно другие product_id и expires_date:

LAST RECEIPT INFORMATION: 
 {
    "expires_date" = "2019-01-17 16:47:19 Etc/GMT";
    "expires_date_ms" = 1547743639000;
    "expires_date_pst" = "2019-01-17 08:47:19 America/Los_Angeles";
    "is_in_intro_offer_period" = false;
    "is_trial_period" = false;
    "original_purchase_date" = "2019-01-20 18:38:59 Etc/GMT";
    "original_purchase_date_ms" = 1548009539000;
    "original_purchase_date_pst" = "2019-01-20 10:38:59 America/Los_Angeles";
    "original_transaction_id" = 1000000495390111;
    "product_id" = "com.mywebsite.group2.weekly2"; // WRONG product_id
    "purchase_date" = "2019-01-17 16:44:19 Etc/GMT";
    "purchase_date_ms" = 1547743459000;
    "purchase_date_pst" = "2019-01-17 08:44:19 America/Los_Angeles";
    quantity = 1;
    "transaction_id" = 1000000495942766;
    "web_order_line_item_id" = 1000000042278610;
}

   - DATE BOUGHT SUBSCRIPTION = 2019-01-20 18:38:59 +0000 // This is the time that I "re-bought" the product and StoreKit told me I'm already subscribed.)


   - DATE SUBSCRIPTION EXPIRES = 2019-01-17 16:47:19 +0000 // This is the completely wrong date.

Вот часть моего средства проверки квитанции, которую я получаю купленным / срок действия:

if let receiptInfo: NSArray = appReceiptJSON!["latest_receipt_info"] as? NSArray {
    let lastReceipt = receiptInfo.lastObject as! NSDictionary

    // Get last receipt
    print("\nLAST RECEIPT INFORMATION: \n", lastReceipt)

    // Format date
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss VV"
    formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale

    // Get "original_purchase_date" as NSDate
    let subscriptionBoughtDate: NSDate = formatter.date(from: lastReceipt["original_purchase_date"] as! String)! as NSDate
    print("\n   - DATE BOUGHT SUBSCRIPTION = \(subscriptionBoughtDate)\n")

    // Get "expires_date" as NSDate
    let subscriptionExpirationDate: NSDate = formatter.date(from: lastReceipt["expires_date"] as! String)! as NSDate
    print("\n   - DATE SUBSCRIPTION EXPIRES = \(subscriptionExpirationDate)\n")

    // Save the expiration date.
    // ...
    // Done saving the expiration date.
}

Почему при восстановлении / повторной покупке у меня совершенно неправильный product_id и дата истечения срока действия, а первоначальная покупка работает нормально?

При необходимости я могу опубликовать больше кода, чтобы помочь отладить эту причудливую проблему. Просто дайте мне знать, что вы хотели бы увидеть.

...