Skip to content

Releases: remp2020/crm-apple-appstore-module

0.32.0

23 Aug 12:21
Compare
Choose a tag to compare
  • Added handling of DID_RENEW notifications to complement internal "charge". remp/crm#1565
    • Until now CRM would do manual check if the subscription was renewed at the expected charge date.
    • Now we correctly handle online notification received by Apple, which (hopefully) is trigerred at the time of the renewal and not too late after it.

0.31.0

21 May 10:05
Compare
Choose a tag to compare
  • Added failsafe to avoid possibly duplicated inapp payments in the database if the payment wasn't matched via Apple's transaction_id. remp/crm#1817
  • Fixed missing payment meta information for payments created through AppleAppstoreGateway::charge() method. This caused duplication of payments once CRM received server-to-server notification. remp/crm#1817
  • Added support for DID_FAIL_TO_RENEW notification type in server to server notification handler. remp/crm#1822

0.29.0

02 Mar 13:38
Compare
Choose a tag to compare
  • BREAKING: Bump minimal PHP version to 7.3.

0.28.0

25 Jan 08:13
Compare
Choose a tag to compare
  • Fixed possibility of missing original transaction record if webhook was processed and purchase was never successfully verified online. remp/crm#1684
  • Fixed bug with failed recurrent payment reactivation. The status was changed correctly, but the recurrent payment still linked to the failed attempt and was never attempted again. remp/crm#1688
  • Raised lock timeout when verifying/restoring purchase to 20 seconds to avoid conflicts with notification processing. Apple is sometimes not able to verify receipt within the 3 seconds and inconsistency issues. remp/dn-mofa#323

0.27.0

07 Jan 12:02
Compare
Choose a tag to compare
  • Fixed issue with duplicate prepaid payments being created if recurrent charge attempt was executed before the end of active subscription. remp/crm#1566
  • Fixed inability to determine end date of previous subscription for 2nd and further charge attempts. remp/crm#1674

0.24.0

10 Nov 13:19
Compare
Choose a tag to compare
  • Added AppleAppstoreUserDataProvider to prevent from deleting user if user has active Apple App Store recurrent payment. remp/crm#1510
  • Added mutex to prevent collision of processing of the same transaction ID notification. remp/crm#1573
  • Processing of S2S payment notification (inside ServerToServerNotificationWebhookApiHandler) delayed by 1 minute to avoid collision with processing of payment send directly from a device (in VerifyPurchaseHandler). remp/crm#1573

0.23.0

27 Oct 13:44
Compare
Choose a tag to compare
  • Fixed missing paid_at date for all prepaid payments (data migration). remp/crm#1543
  • Added StopRecurrentPaymentInfoWidget to provide more information how to stop recurrent payment in Apple AppStore. remp/crm#1504

0.22.0

16 Oct 07:59
Compare
Choose a tag to compare
  • Fixed invalid name of extension class, accidentally omitted Module word.

0.21.0

01 Oct 14:10
Compare
Choose a tag to compare
  • Fixed UnifiedReceipt.LatestReceiptInfo. It's array of objects, not object. remp/crm#1408
    • Fixed schema of LatestReceiptInfo for validation of Apple's ServerToServerNotification.
    • Fixed model UnifiedReceipt. Method getLatestReceiptInfo() returns array of objects instead of single object.
    • Changed ServerToServerNotificationProcessorInterface to work with LatestReceiptInfo. Fixed all implementations.
    • Added new trait ServerToServerNotificationLatestReceiptTrait for loading latest transaction from ServerToServerNotification.
    • Fixed tests.
  • Added processing of ServerToServerNotification of INTERACTIVE_RENEWAL type. remp/crm#1443
  • Fixed processing of renewed Apple purchases in case previous payment is missing in our system. remp/crm#1443 remp/crm!1089
  • Added AppleAppstoreOriginalTransactions to store all receipts per each original transaction ID for renewal purposes.
  • Fixed search for recurrent payment when cancelling purchase.
  • Added processing of DID_CHANGE_RENEWAL_PREF notification type. User changed subscription preferences (type) for next period. remp/crm#1463
  • Added processing of DID_CHANGE_RENEWAL_STATUS notification type. User changed renewal status. remp/crm#1464
  • Fixed gateway crashing while processing recurrent payments without ServerToServerNotification. Will be fixed by remp/crm#1469
  • Added logging of missing response in AppleAppstoreGateway. remp/crm#1469
  • Added /api/v1/apple-appstore/verify-purchase API endpoint for synchronous payment confirmation from app. This is from now the primary source of receipts. remp/crm#1469
  • Changed processing of renewals to be dependent primarily on verify-purchase-based receipts. Webhook processing will be added back later. remp/crm#1469
  • Added enforcing of access token presence for all devices linked to the original transaction ID) to maintain user's inapp access even after logout.
  • Added event handlers to attempt to claim user when device and access tokens are paired together (e.g. login, register). remp/crm#1491
  • Added event handlers to protect backend-only access tokens before device token unpairing - devices would lose access even when they shouldn't. remp/crm#1494
  • Removed subscription type ID mismatch check. This is a valid scenario if it is an upgrade. Apple changes product for the same original transaction ID.
  • Added stopping of other active recurring payments with same original transaction ID if we start new one. Upgrades could cause multiple recurring payments to be present.
  • Changed webhook - transaction that's already processed is not processed anymore to avoid duplicate processing.

0.20.0

01 Sep 10:50
Compare
Choose a tag to compare
  • Changed ServerToServerNotificationProcessor::getUser(). Added search for user within payment_meta, then within user_meta.
  • Added creation of anonymous unclaimed user if no user with original transaction ID of in-app purchase was found. iOS in-app purchases have to be possible without account in CRM. remp/crm#1235
  • Added tests for ServerToServerNotificationProcessor::getUser(). remp/crm#1235