I am working on an application which makes use of Google Play In-app Billing V3 to sell an item which valid for a certain period of time. After a user makes a purchase, I send the purchase data to our server and immediately consume it, if successful. The server then grants access to the extra service for this particular user until the period ends. Note: I am not using in-app subscriptions.
I am testing purchases with test users in the sandbox mode where payment is not taken. Most of them are successful and this flow works fine. However, sometimes, my purchases are cancelled by Google immediately. In the order history in my Google Checkout account, I see the line:
"For your protection, Google cancelled this order. The transaction was considered fraudulent.".
Even if this happens, I see that I receive a "purchaseState": 0
in the purchase data, indicating a success. Also, trying to consume this product also results in success (calling IInAppBillingService.consumePurchase(version, package, token)
returns 0). Querying my inventory at a later time shows that I have no purchases (and therefore no refunds/cancels) and I am able to freely purchase the same item again. This is the same behavior as in the normal, uncancelled state.
- Does Google often cancel orders in the same way, outside of the test sandbox?
- Can items which were successfully purchased and consumed still be cancelled (i.e. money refunded) for reasons outside of the control of the developer?
- Is it possible to know about cancellations for products which have already been consumed?