aporat/store-receipt-validator
PHP receipt validator for Apple App Store and Amazon Appstore
9.0.0
4.0M downloads/mo
#4288 most downloaded on Packagist
aporat/store-receipt-validator
What this package is like to depend on
Last release 3 months ago
15 May 2026
Release timing varies
gaps range from 2 weeks to 12 months
Rarely documented
notes for 9 of 58 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
58 releases · first in 2014
5 releases in the last 12 months
see the full history below
Release timeline
58 releases · Aug 2014 to May 2026Releases
latest 58-
9.0.015 May 2026Release notes
Open source →v9.0.0 — App Store Server API expansion
The AppleAppStore\Validator now covers Apple's full App Store Server API surface — transactions, subscriptions, refunds, notifications, and consumption — with typed request/response objects, JWS verification, and PSR-3 logging on every call.✨ New endpoints on AppleAppStore\Validator
getTransactionHistory() / getTransactionInfo() / getAppTransactionInfo()
finishTransaction(), setAppAccountToken(), sendConsumptionInformation()
lookUpOrderId(), getRefundHistory()
getAllSubscriptionStatuses(), extendSubscriptionRenewalDate(), extendSubscriptionRenewalDatesForAllActiveSubscribers(), getStatusOfSubscriptionRenewalDateExtensions()
getTestNotificationStatus(), getNotificationHistory()⚠️ Deprecations
Validator::validate() is deprecated. Use getTransactionHistory() for paginated history or getTransactionInfo() for a single transaction. It still works and will be removed in a future major release.Full Changelog: 8.0.0...9.0.0
Release notes
Open source →Version 9.0.0 of the Google Play Billing Library and Kotlin extensions are now available. See the PBL 9 migration guide if you want to migrate from the previous versions of PBL.
Summary of changes
Updated error codes for blocked Play Store activity : Error codes for blocked Play Store apps have been updated. For instances where the Play Store app is blocked by the system (for example, in OEM-customized kids mode), the response code has changed from ERROR to BILLING_UNAVAILABLE . Additionally, the BillingResult for such cases now provides a Play Store is blocked debug message. Note: For this feature to work, you need AndroidX.core library version 1.9 or later.
Nullability update for developer-provided billing : The DeveloperProvidedBillingDetails.getLinkUri() method has been updated to be @Nullable . This change supports scenarios where the direct link URI for external payments is unavailable during the payment selection stage.
To handle this change safely, ensure your integration code handles both null and empty string ( "" ) values from the DeveloperProvidedBillingDetails.getLinkUri() method before parsing or launching browser intents.
Updated targetSdkVersion to 35.
You can now use in-app messaging to notify users of an upcoming opt-in price increase. This lets users confirm the price increase without leaving the app. The message for an outstanding opt-in price increase is shown starting on the first day the user can accept the price increase, and the message is shown a maximum of once every 7 days.
-
8.0.026 Mar 2026Release notes
Open source →What's Changed
- Use Guzzle interface instead of its implementation by @erickskrauch in #209
- Add comprehensive test coverage for Apple App Store enums by @aporat in #210
- Add unit tests for iTunes APIError enum and setSharedSecret by @aporat in #211
- Bump ramsey/composer-install from 3 to 4 by @dependabot[bot] in #213
- Add PSR-3 logging support to all validators by @aporat in #214
- Migrate from Guzzle to PSR-18/PSR-17 HTTP interfaces by @aporat in #215
- Bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in #216
Full Changelog: 7.1.0...8.0.0
Release notes
Open source →Version 8.0.0 of the Google Play Billing Library and Kotlin extensions are now available.
Summary of changes
In-app items will now be referred to as one-time products .
Multiple purchase options and offers for one-time products.
You can now have multiple purchase options and offers for your one-time products. This provides you flexibility in how you sell your products and reduces the complexity of managing them.
Improved the queryProductDetailsAsync() method.
Prior to PBL 8.0.0, the queryProductDetailsAsync() method didn't return products that couldn't be fetched. This could be due to reasons such as the product is not found or no offers are available to the user. With PBL 8.0.0, unfetched products are returned with a new product-level status code that provides information about unfetched products. Note that there is a change in the signature of the ProductDetailsResponseListener.onProductDetailsResponse() which requires changes in your app. For more information, see process the result .
Automatic service reconnection.
The new BillingClient.Builder.enableAutoServiceReconnection() builder parameter lets developers opt-in to automatic service reconnection, which simplifies connection management by handling reconnections to the Play Billing Service automatically and eliminating the need to manually call startConnection() in the event of a service disconnection. For more information, see Automatically Re-establish a Connection .
Sub-response codes for the launchBillingFlow() method.
The BillingResult returned from launchBillingFlow() will now include a sub-response code field. This field will only be populated in some cases to provide a more specific reason for the failure. The sub-response field can have the following values:
-
PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS - Returned when the user's funds are less than the price of the item they are attempting to purchase.
-
USER_INELIGIBLE - Returned when the user doesn't meet the configured eligibility requirements for a subscription offer.
-
NO_APPLICABLE_SUB_RESPONSE_CODE - The default value, returned when no other sub-response code is applicable.
Removed the queryPurchaseHistory() method.
The queryPurchaseHistory() method that was previously marked as deprecated has now been removed. See Query Purchase History for details on what alternative APIs to use instead.
Removed the querySkuDetailsAsync() method.
The querySkuDetailsAsync() method that was previously marked as deprecated has now been removed. You should use queryProductDetailsAsync instead.
Removed the BillingClient.Builder.enablePendingPurchases() method.
The enablePendingPurchases() method with no parameters that was previously marked as deprecated has now been removed. You should use enablePendingPurchases(PendingPurchaseParams params) instead. Note that the deprecated enablePendingPurchases() is functionally equivalent to enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) .
Removed the overloaded queryPurchasesAsync() method that takes a skuType .
The queryPurchasesAsync(String skuType, PurchasesResponseListener listener) method that was previously marked as deprecated has now been removed. Alternately, use queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener) .
-
7.1.029 Jan 2026Release notes
Open source →What's Changed
- Bump codecov/codecov-action from 4 to 5 by @dependabot[bot] in #201
- Bump actions/checkout from 4 to 5 by @dependabot[bot] in #202
- Update squizlabs/php_codesniffer requirement from ^3.10 to ^3.10 || ^4.0 by @dependabot[bot] in #203
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in #204
- Bump actions/cache from 4 to 5 by @dependabot[bot] in #205
- Improve popular package with updates and fixes by @aporat in #206
- Mark iTunes API classes as deprecated in favor of App Store Server API by @aporat in #207
- Improve code quality with strict types and readonly classes by @aporat in #208
Full Changelog: 7.0.0...7.1.0
Release notes
Open source →Version 7.1.0 of the Google Play Billing Library and Kotlin extensions are now available.
Summary of changes
-
Improved thread safety related to connection status and management.
-
Introduced partial changes for testing BillingResult response codes which is fully released in Play Billing Library 7.1.1. To test your integration using this feature, you'll need to upgrade to Play Billing Library 7.1.1. A bug exists that will only impact applications with billing overrides testing enabled and does not affect regular usage. For more information, see Test BillingResult response codes .
-
7.0.017 Sep 2025Release notes
Open source →- [Breaking] All date fields now return
Carbon\CarbonInterface|nullinstead of\Carbon\Carbon|null
Release notes
Open source →Version 7.0.0 of the Google Play Billing Library and Kotlin extensions are now available.
Summary of changes
Added APIs to support installment subscriptions.
-
Added ProductDetails.InstallmentPlanDetails for installment base plans that users are eligible to purchase. This API helps your app identify the installment plan and its commitment setup to provide related information to the user. To learn more, see our subscription installments guide .
Added PendingPurchasesParams and BillingClient.Builder.enablePendingPurchases(PendingPurchaseParams) to replace BillingClient.Builder.enablePendingPurchases() , which has been deprecated in this release.
-
The deprecated enablePendingPurchases() is functionally equivalent to enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) .
Added APIs to support pending transactions for subscription prepaid plans:
-
Use PendingPurchasesParams.Builder.enablePrepaidPlans() along with BillingClient.Builder.enablePendingPurchases(PendingPurchaseParams) to enable pending transactions for subscription prepaid plans. When adding support, be sure that your app also correctly manages subscription lifecycles. To learn more see our pending purchases guide .
-
Added Purchase.PendingPurchaseUpdate and Purchase.getPendingPurchaseUpdate() for retrieving the pending top-up or upgrade or downgrade to an existing subscription.
Removed BillingClient.Builder.enableAlternativeBilling() , AlternativeBillingListener , and AlternativeChoiceDetails .
-
Developers should use BillingClient.Builder.enableUserChoiceBilling() with UserChoiceBillingListener and UserChoiceDetails in the listener callback instead.
Removed BillingFlowParams.ProrationMode , BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode() , and BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode() .
-
Developers should use BillingFlowParams.SubscriptionUpdateParams.ReplacementMode with BillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int) instead.
Removed BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken() .
-
Developers should use BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String) instead.
BillingClient.queryPurchaseHistoryAsync() has been deprecated and will be removed in a future release. Developers should use the following alternatives instead:
-
Acknowledged and pending purchases: Use BillingClient.queryPurchasesAsync() to fetch the active purchases.
-
Consumed purchases: Developers should keep track of consumed purchases on their own servers.
-
Canceled purchases: Use the voided-purchases developer API.
-
For more details, see Query Purchase History
BillingFlowParams.ProductDetailsParams.setOfferToken() now throws an exception when developers specify an empty offerToken .
Updated minSdkVersion to 21 and targetSdkVersion to 34.
- [Breaking] All date fields now return
-
6.1.416 Sep 2025Nothing published for this version
-
6.1.207 Aug 2025Nothing published for this version
-
6.1.004 May 2025Release notes
Open source →Version 6.1.0 of the Google Play Billing Library and Kotlin extensions are now available.
Summary of changes
-
Added APIs to support alternative billing only (i.e. without user choice)
-
Added BillingClient.Builder.enableAlternativeBillingOnly() to functionally enable the ability to offer alternative billing only.
-
Added BillingClient.isAlternativeBillingOnlyAvailableAsync() to check the availability of offering alternative billing only.
-
Added BillingClient.showAlternativeBillingOnlyInformationDialog() to show an information dialog to inform users when alternative billing only is being used.
-
Added BillingClient.createAlternativeBillingOnlyReportingDetailsAsync() to create a payload required to report transactions made through alternative billing only.
-
Updated the user choice billing APIs
-
Added UserChoiceBillingListener to replace AlternativeBillingListener which has been marked as deprecated.
-
Added UserChoiceDetails to replace AlternativeChoiceDetails which has been marked as deprecated.
-
Added BillingClient.Builder.enableUserChoiceBilling() to replace BillingClient.Builder.enableAlternativeBilling() which has been marked as deprecated.
-
Added BillingClient.getBillingConfigAsync() to retrieve Google Play country.
-
-
6.0.602 May 2025Nothing published for this version
-
6.0.419 Apr 2025Nothing published for this version
-
6.0.219 Apr 2025Nothing published for this version
-
6.0.019 Apr 2025Nothing published for this version
-
5.0.111 Mar 2025Nothing published for this version
-
5.0.027 Feb 2025Nothing published for this version
-
4.4.306 Mar 2024Nothing published for this version
-
4.4.202 Feb 2024Nothing published for this version
-
4.4.121 Apr 2023Nothing published for this version
-
4.4.020 Apr 2023Nothing published for this version
-
4.3.010 Nov 2022Nothing published for this version
-
4.2.029 Dec 2021Nothing published for this version
-
4.1.013 Oct 2021Nothing published for this version
-
4.0.302 Dec 2020Nothing published for this version
-
4.0.202 Dec 2020Nothing published for this version
-
4.0.118 Aug 2020Nothing published for this version
-
4.0.004 Aug 2020Nothing published for this version
-
3.5.003 Aug 2020Nothing published for this version
-
3.4.131 Mar 2020Nothing published for this version
-
3.4.019 Nov 2019Nothing published for this version
-
3.3.019 Oct 2019Nothing published for this version
-
3.2.030 May 2019Nothing published for this version
-
3.1.027 Feb 2019Nothing published for this version
-
3.0.026 Dec 2018Nothing published for this version
-
2.2.007 Nov 2018Release notes
Open source →Version 2.2.0 of the Google Play Billing provides functionality that helps developers ensure purchases are attributed to the correct user. These changes replace the need to build custom solutions based on developer payload. As part of this update, the developer payload functionality has been deprecated and will be removed in a future release. For more information, including recommended alternatives, see Developer payload .
Google Play Billing Billing Library 2 for Unity
In addition to the current Java and Kotlin versions of Google Play Billing Library 2, we released a version of the library for use with Unity. Game developers using the Unity in-app purchase API can upgrade now to take advantage of all Google Play Billing Library 2 features and to make the subsequent upgrades to future versions of the Google Play Billing Library easier.
To learn more, see Use Google Play Billing with Unity .
Summary of changes
-
Java Google Play Billing Library
-
In AcknowledgePurchaseParams , deprecated setDeveloperPayload() and getDeveloperPayload() methods.
-
In ConsumeParams , deprecated setDeveloperPayload() and getDeveloperPayload() methods.
-
In BillingFlowParams , renamed setAccountId() to setObfuscatedAccountId() , and documented length restriction of 64 characters and restriction disallowing Personally Identifiable Information (PII) in this field. setAccountId() has been marked as deprecated and will be removed in a future library version.
-
In BillingFlowParams , added setObfuscatedProfileId() which works similarly to setObfuscatedAccountId() . For more information, see Developer payload updates and alternatives .
-
In Purchase , added the getAccountIdentifiers() method to return the obfuscated account identifiers set in BillingFlowParams .
-
In BillingClient , the loadRewardedSku() method has been marked deprecated as part of deprecating rewarded SKUs. You can find more information about the deprecation in the Play Console Help Center .
-
-
2.1.013 Apr 2018Release notes
Open source →Version 2.1.0 of the Google Play Billing library and the new Kotlin extension are now available. The Play Billing Library Kotlin extension provides idiomatic API alternatives for Kotlin consumption, featuring better null-safety and coroutines. For code examples, see Use the Google Play Billing Library .
This version contains the following changes.
Summary of changes
- In BillingFlowParams , deprecated setOldSku(String oldSku) and replaced with setOldSku(String oldSku, String purchaseToken) , to disambiguate when multiple accounts on the device own the same sku.
-
2.0.609 Feb 2018Nothing published for this version
-
2.0.421 Nov 2017Nothing published for this version
-
2.0.218 Sep 2017Release notes
Open source →Version 2.0.2 of the Google Play Billing library is now available. This release contains updates to the reference documentation and does not change library functionality.
-
2.0.019 Apr 2017Nothing published for this version
-
1.5.014 Dec 2016Nothing published for this version
-
1.4.111 May 2016Nothing published for this version
-
1.4.028 Apr 2016Nothing published for this version
-
1.3.124 Mar 2016Nothing published for this version
-
1.3.020 Dec 2015Nothing published for this version
-
1.2.120 Nov 2015Release notes
Open source →Version 1.2.1 of the Google Play Billing library is now available. This version contains the following changes.
Major changes
- Added support for rewarded products . For more information on monetization options, see Add rewarded-product-specific features .
Other changes
-
Added public constructors for PurchasesResult and SkuDetailsResult to make testing easier.
-
SkuDetails objects can use a new method, getOriginalJson() .
-
All AIDL service calls are now handled by background threads.
Bug fixes
- Null callback listeners are no longer passed into public APIs.
-
1.2.015 Oct 2015Nothing published for this version
-
1.1.117 Sep 2015Nothing published for this version
-
1.1.019 Apr 2015Nothing published for this version
-
1.0.1303 Mar 2015Nothing published for this version
-
1.0.1226 Feb 2015Nothing published for this version
-
1.0.1125 Feb 2015Nothing published for this version
-
1.0.1004 Feb 2015Nothing published for this version
-
1.0.930 Jan 2015Nothing published for this version
-
1.0.809 Dec 2014Nothing published for this version
-
1.0.721 Nov 2014Nothing published for this version
-
1.0.631 Oct 2014Nothing published for this version
-
1.0.513 Aug 2014Nothing published for this version
-
1.0.413 Aug 2014Nothing published for this version
-
1.0.208 Aug 2014Nothing published for this version
-
1.0.008 Aug 2014Nothing published for this version