Releases: remp2020/crm-apple-appstore-module
Releases · remp2020/crm-apple-appstore-module
0.32.0
- 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
- 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
0.28.0
- 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
- 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
- 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 (inVerifyPurchaseHandler
). remp/crm#1573
0.23.0
0.22.0
0.21.0
- Fixed
UnifiedReceipt.LatestReceiptInfo
. It's array of objects, not object. remp/crm#1408- Fixed schema of
LatestReceiptInfo
for validation of Apple'sServerToServerNotification
. - Fixed model
UnifiedReceipt
. MethodgetLatestReceiptInfo()
returns array of objects instead of single object. - Changed
ServerToServerNotificationProcessorInterface
to work withLatestReceiptInfo
. Fixed all implementations. - Added new trait
ServerToServerNotificationLatestReceiptTrait
for loading latest transaction from ServerToServerNotification. - Fixed tests.
- Fixed schema of
- 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
- Changed
ServerToServerNotificationProcessor::getUser()
. Added search for user withinpayment_meta
, then withinuser_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