App Store Receipts

RSS for tag

Validate app and in-app purchase receipts with the App Store using App Store Receipts.

App Store Receipts Documentation

Posts under App Store Receipts tag

81 Posts
Sort by:
Post not yet marked as solved
0 Replies
299 Views
Hi, We are working on handling refunds for one time products on apple devices. In our scenario, we have two purchased products and we start refunding them, refund for item 1, then refund for item 2( in an interval of 2-3 minutes). We expect to get two apple receipts, first receipt containing both products, one active(item2) and one refunded(item1, cancellation properties set). The second receipt containing both products, both being refunded(having the cancellation_date_* properties set). This is not happening, we get the 2 receipts, both containing the same data about the refunded products, so both receipts have the cancellation dates set for both products. Is this a normal behavior? Should we assume that the processing of the refunds and sending out the notifications/receipts happens async, resulting in having both refunds already processed in the moment when the receipts/messages are sent out? Thanks, David
Posted Last updated
.
Post not yet marked as solved
2 Replies
396 Views
I want to use the original_application_version value from the app receipt to grandfather some features for users who are first-time users vs existing users. In the Receipt Validation Programming Guide, the field's notes are as follows: This corresponds to the value of CFBundleVersion (in iOS) or CFBundleShortVersionString (in macOS) in the Info.plist file when the purchase was originally made. In the sandbox environment, the value of this field is always “1.0”. I'm unsure which value to expect in Mac Catalyst, since it's a UIKit (and thus iOS)-based app being distributed through the Mac App Store and run on a Mac. My instinct is that the store is determinative, and thus to expect the macOS CFBundleShortVersionString on the Mac. Unfortunately, since the value is always "1.0" in the sandbox (including TestFlight) I don't have a good way to test this. Does anyone have any real-world experience that can shed light on what format I can expect?
Posted
by tschmitz.
Last updated
.
Post marked as solved
1 Replies
498 Views
Hi everyone. I recently submitted one of my Unity games for App Review today and it got rejected. The rejection was related to an In-App Purchase issue in iOS 15.3 (which, at the time of writing, is the latest version). Their response is below: We found that your in-app purchase products exhibited one or more bugs when reviewed on iPhone running iOS 15.3 on Wi-Fi. --Next Steps-- When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead. A couple things to note. I'm not even using server-side validation for my IAPs. For this particular game, I'm using local validation. My IAPs also worked in the sandbox environment. Both the test builds and production builds are running identical code. Any ideas on what could be causing this?
Posted Last updated
.
Post not yet marked as solved
0 Replies
261 Views
I created one product in appstoreconnect and am testing in sandbox mode Purchase auto renewal product A . Original transaction id is 12345 renews few times and expires After 3 days , purchase same product A . Again the original transaction id received from receipt is 12345 . Is this expected behaviour? . If yes how to differentiate between old and new purchase?
Posted Last updated
.
Post not yet marked as solved
1 Replies
195 Views
The receipt I receive from the Api for an annual subscription does not contain "expires_date" value, where as a receipt for a monthly subscription does return the value. Both subscriptions are of type "auto-renewable". Why is this the case, when all subscriptions can contain an expiration/renewal date.
Posted Last updated
.
Post marked as solved
3 Replies
563 Views
We're having problems with the Sandbox Server URL for the App Store Server Notifications. Unfortunately, we're not getting any callbacks from Apple Server while making in app purchase. We examined the URL endpoint and verified that it complies with Apple's guidelines, as well as appropriately configuring it. Ref. https://help.apple.com/app-store-connect/#/dev0067a330b
Posted
by Ritik_Raj.
Last updated
.
Post not yet marked as solved
2 Replies
366 Views
We've trying to integrate server-server communication implemented for in-app purchases. During the process of testing we're facing issues which I believe its something to do with JWT creation. Is anyone faced this error response: https://developer.apple.com/documentation/appstoreserverapi/invalidappidentifiererror when you try https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses?changes=latest_major Any feedback or help would be appreciated. We've followed the setup and JWT generation as per this: https://developer.apple.com/documentation/appstoreserverapi/generating_tokens_for_api_requests?changes=latest_major Thanks!
Posted
by SKAmp.
Last updated
.
Post not yet marked as solved
2 Replies
585 Views
Hello, Apple Developer Forum team. My team wishes you happy New Year and late Merry Christmas! We wish you a pay raise and a lot of days off! :) Right now, my company works on a new program called MyQuickMac for macOS, which we plan to submit to App Store. Currently, my developer team is working on adding the in-app purchases to our product. While working on it, they encountered several issues, and this is exactly why I'm writing to you. Below, my team describes exactly which error did they encounter, and what did they try to resolve it. Please help us resolve these problems, it's very important for us. Our current product is built using Electron and Python as a server (Flask). We use the "InAppPurchases" module from Electron to add the in-app purchases (https://www.electronjs.org/docs/latest/tutorial/in-app-purchases). Currently, we use the Sandbox to test our system, and we encountered the following problem when we try to purchase any product: Purchasing mqm_1y2m... { transactionIdentifier: '', transactionDate: '', originalTransactionIdentifier: '', transactionState: 'failed', errorCode: 0, errorMessage: 'MZFinance.NoAccount_message', payment: { productIdentifier: 'mqm_1y2m', quantity: 1 } } { productIdentifier: 'mqm_1y2m', quantity: 1 } Failed to purchase mqm_1y2m. This error occurs when we click on the "Buy" button, after our program submits the payment to the payments queue. The payment is successfully added to the payment queue, but after we log in with our testing account, this error occurs. We have read the documentation (https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchases_with_sandbox?language=objc), and it says that to test the in-app purchases, we need to try to buy the product, log in with the testing account, and after this testing account will be added to the App Store automatically, but it doesn't happen. What do we do wrong? We tried creating several testing accounts, but none of them worked. Also, we can't sign out of the testing account after logging in. Currently, to do this we have to clear the App Store cache, remove all testing account-related items from the Keychain and reboot our device, which is a long process. We have read that to log out of the testing account, you need to select "Sign out" from the App Store, but because of the problem specified above, the App store doesn't have this option. Is this the correct way to sign out of the testing account? We hope that there should be some easy way to do it. We tried to find some information about the error "MZFinance.NoAccount_message", but there were only 5 results, and none of them were helpful. We tried the following to resolve this error: created different testing accounts (we tried 3 accounts, none worked) changed the country of the testing accounts cleared the payment queue reset the password of the testing account tried different products tried to log in to the App Store and iCloud with the testing account restarted our device numerous times cleared the App Store cache deleted the entries left after trying some testing accounts in the Keychain signed the Electron ".app" with our certificate None of these helped us, we get the same error every time. Here's the link to the code we use to initialize the payments and observe the queue. Initialize payments: https://pastebin.com/S9KvsNGK Observe queue: https://pastebin.com/v1Gmqqz5 Also, we attach 2 log files that were recorded with the "Console" application, while trying to purchase a product. Log #1 (all messages): https://pastebin.com/jpuJaMqv Log #2 (only messages from "commerce" process): https://pastebin.com/w27qkyEB So, our questions are: Why testing account isn't added to the App Store? Why does "MZFinance.NoAccount_message" error occur? How do we log out from the testing account? We hope that the Apple Developer Forum team will help us resolve these issues. Some information: Device: Mac Mini 2011 with macOS 10.12.6 Electron: 16.0.4 Python: 3.8.8 If you need any other information, please let us know, and we will send it to you as soon as possible. I hope that together, we will resolve these problems, and our new program will be successfully submitted to the App Store. Thank you and have a nice day! Oleksii and team. Owner of American Best Technologies Company, LLC.
Posted
by abtco.
Last updated
.
Post not yet marked as solved
1 Replies
251 Views
The service we provide to our client is a short videos from famous people, like stars, politics, singer etc. So the whole process looks like this: User open the app, choose one author (famous person) from a list by clicking on author's picture. Tap a message author should say on the final video. Pay for that video by Apple in app purchase. Then author receive notification about new order, open the APP and record a 1-2 minutes short video. When video is done, author tap on Send button and user receive author's video. On that point the order is complete. We pay author royalty and get our commission as an agent. Then user open apple account and ask Apple for refund of that order. And Apple give user's money back after 2-3 days. In this case we provided service to that user (by sending video), paid royalty to author and gave user's money back. Now we have many orders like that and we loose so much money. So what we could do to not loose our money?
Posted
by fame_app.
Last updated
.
Post not yet marked as solved
5 Replies
2.3k Views
I'm stuck! For starters, mobile is not the primary platform for our app so I apologize ahead of time if I don't know enough about this to ask the right questions. But I'm learning :) We are saving the original transaction id when a user makes an in-app purchase for a subscription to our product, but their subscriber id is not included in the receipt. I can download sales reports with subscriber ids but even the "transaction level" subscriber reports do not contain the transaction id. I do not care in the slightest who the subscriber id belongs to so I don't need any user information. Nothing like that. I just need to match transactions to records in our system for reporting purposes. Has anybody found a way to tie subscriber ids to transaction ids or vice versa?
Posted
by ajhank2.
Last updated
.
Post not yet marked as solved
2 Replies
297 Views
I've got a user that is having a problem accessing their unlocked in-app purchase. They've sent us a copy of their receipt, and I plugged the Order ID into the Lookup API (https://developer.apple.com/documentation/appstoreserverapi/look_up_order_id). I'm getting {"status":1} as a result on the lookup which the docs say is invalid (https://developer.apple.com/documentation/appstoreserverapi/orderlookupstatus), and I'm not quite sure what to do with that. Does that mean they faked the invoice? That seems really unlikely to me. I also wondered if that means they revoked the purchase, but in that case I would expect it to still return the transaction so I could see the revocation reason and date. I don't want to go back to the user with "Sorry, your purchase is not valid" without knowing why. Any additional information or guidance on interpreting "Invalid" would be really helpful.
Posted Last updated
.
Post not yet marked as solved
2 Replies
333 Views
I need to track revenue to some analytics services server-side when receiving App Store Server Notifications about subscription status updates. But response body from notifications and from verifying receipt doesn't include price info. Is it possible to get the price of the transaction on the server? Maybe is it a way of validating transaction ids or something like that? Currently, I can get the price and currency only client-side in the app from products info?
Posted
by mbuu8888.
Last updated
.
Post not yet marked as solved
1 Replies
312 Views
Hello all, Our app's product is a time based limited duration offering and we want to offer a monthly subscription for 4 months or an up-front payment for the 4 months. The up-front payment is easy to add (thinking non-renewing subscription) but I can't seem to automatically cancel a renewing subscription after 4 months of the user paying. In general hoping for a some way to set a schedule to end or stop the subscription or if we can cancel subscriptions after the 4 months by making calls to an API or something. Alternatively, some sort of 4 month long financing/pay over the course of 4 months would work similarly.
Posted Last updated
.
Post marked as solved
2 Replies
394 Views
My app does validate the receipt on launch. When I do this via Xcode on app launch, I am presented with a Sign In prompt, because the Xcode version does understandably not include a receipt. However, on TestFlight, the app also does not include a receipt or at least I am seeing the same prompt which should be the result of refreshing the receipt on launch if none is available. I am wondering if this will also happen for apps downloaded from the App Store? I think it would be bad UX to have the first thing happen in the app be asked to sign in with you Apple ID. Or is this related to the app using the "sandbox" environment via TestFlight? Any hints will be appreciated. Thanks!
Posted
by scurra.
Last updated
.
Post not yet marked as solved
1 Replies
404 Views
Hello. After successful in-app purchase from the client, we pass the receipt to the server and verify it by calling verifyReceipt on the server. In the course of this process, we find something strange and ask for it. Below is the actual data that verifyReceipt responded to after payment in the actual production environment. (Some have been deleted) The strange thing is that we responded that receipt was OK with status 0, but receipt.bundle_id is not our bundle_id. How can a different bundle_id be in receipt? Does it happen under normal circumstances? Which method is the most complete verification method? Thanks, { "receipt":{ "receipt_type":"Production", "adam_id":, "app_item_id":, "bundle_id":"other bundle id", "application_version":"1", "download_id":, "version_external_identifier":, "receipt_creation_date":"2021-10-28 21:31:09 Etc/GMT", "receipt_creation_date_ms":"1635456669000", "receipt_creation_date_pst":"2021-10-28 14:31:09 America/Los_Angeles", "request_date":"2022-01-05 07:32:15 Etc/GMT", "request_date_ms":"1641367935663", "request_date_pst":"2022-01-04 23:32:15 America/Los_Angeles", "original_purchase_date":"2021-10-28 17:16:22 Etc/GMT", "original_purchase_date_ms":"1635441382000", "original_purchase_date_pst":"2021-10-28 10:16:22 America/Los_Angeles", "original_application_version":"1", "in_app":[ { "quantity":"1", "product_id":"", "transaction_id":"", "original_transaction_id":"", "purchase_date":"2021-10-28 21:31:09 Etc/GMT", "purchase_date_ms":"1635456669000", "purchase_date_pst":"2021-10-28 14:31:09 America/Los_Angeles", "original_purchase_date":"2021-10-28 21:31:09 Etc/GMT", "original_purchase_date_ms":"1635456669000", "original_purchase_date_pst":"2021-10-28 14:31:09 America/Los_Angeles", "is_trial_period":"false", "in_app_ownership_type":"PURCHASED" } ] }, "environment":"Production", "status":0, "sandbox":false, "service":"apple" }
Posted Last updated
.
Post not yet marked as solved
2 Replies
1k Views
Hello, my name is Antony Basta and I am the developer of an app called SecuriKey. SecuriKey allows any old apartment building intercom to be controlled from an app. Users can create entry codes that work once, up to a certain date, or are instantly revokable. There is no need for any new or additional hardware – it works with the buildings existing intercom. Currently, the app is using Stripe for subscriptions and it was initially approved 2 months ago for the App Store. I pushed an update a few weeks ago and Apple Rejected it because I am not using In-App Purchase (IAP). I submit an appeal, mentioning that we offer a consumable service that takes place outside of the app (guideline 3.1.3(e)), it is effectively a "Reader" app since we provide VoIP numbers to our customers (guideline 3.1.3(f)), and SecuriKey requires hardware to function – that is, it will not work without a physical intercom (guideline 3.1.4). Additionally, we do ship physical goods to our customers (NFC tags and Security Signs) monthly and require monthly service personnel to service the building using the physical goods for our own back end workflow. A lot of back and forth has occurred between the review team and at the time of this post, the app is still being reviewed by the board. I thoroughly believe we fit within all of the mentioned IAP exception guidelines – but that's a conversation for another day. As I wait, I began to delve into using IAP for this product. I was able to jerry-rig the IAP platform to feed Stripe the necessary data through the notifications apple sends when a subscription is made, and I am able to create an account and collect a payment. But there's one huge oversight. This is a cross-platform app. Meaning, roommates or family members who use different mobile operating systems, can be logged into the same account. A user may sign up from the iPhone but his/her roommate/family member may have an android that also has access to the service under the same account. Thus, the android user will not be able to change the IAP subscription plan from the android side of the service. Furthermore, a web-portal is being developed, and using IAP will not allow us to modify the subscription via the web-portal either. Has anyone ever dealt with something like this? How can you use IAP for a cross-platform application and allow android users to modify the subscription (Whether it be canceling, upgrading, or downgrading)? I appreciate all comments and feedback as I wait on Apple's review board.
Posted Last updated
.
Post not yet marked as solved
0 Replies
379 Views
Hello there! Do you know something about the "Manage App Privacy"? I put the link in the section "App privacy", but I´m unable to upload the app for the review process: Cannot be submitted for testing The following items are required to start the review process: Before you can submit this app for review, an administrator must provide information about the app's privacy practices in the App Privacy section. Don´t know, how to handle this. Can anyone please help me?
Posted
by jenny1267.
Last updated
.