Search Unity

IAP CallBack reports already refunded products

Discussion in 'Unity IAP' started by turbomapper, Mar 13, 2018.

  1. turbomapper

    turbomapper

    Joined:
    Oct 6, 2012
    Posts:
    28
    Hello
    Both automatic callbacks and script called functions (.hasReceipt) reporting true for "product is purchased" although all these test-purchases are refunded long ago.
    The automatic callback sends also the google orderID so i can be totaly sure its the same i have refunded and also checking in googleplay-console all the orderID´s are marked as refunded.
    This issue happens on all my 3 testdevices and also for my testers with their devices.

    here is my code for manual restore.
    product.hasReceipt is true even on refunded products


    public bool[] GetProductPurchaseState(string[] pidArray)
    {
    if (IsInitialized())
    {
    bool[] purchaseState = new bool[pidArray.Length];
    for (int i = 0; i < purchaseState.Length; i++)
    {
    //Debug.Log("pid: " + pidArray[i]);
    Product product = iStoreController.products.WithID(pidArray[i]);
    if (product != null && product.hasReceipt)
    purchaseState[i] = true;
    }
    return purchaseState;
    }
    return null;
    }



    all products are NonConsumables
    Unity version 2017.2.0f3
    Unity IAP is uptodate
     
  2. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
  3. turbomapper

    turbomapper

    Joined:
    Oct 6, 2012
    Posts:
    28
    ok about hasReceipt but what about the callback ?
    The callback sends purchased products which are refunded long ago.
     
  4. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    @turbomapper Can you provide the steps that you followed to issue the refunds?
     
  5. nitrogen777

    nitrogen777

    Joined:
    Mar 31, 2017
    Posts:
    10
    The same problem for me. After refund from Google Play Console the non-consumable content still available for user. Log returns following:

    Initializing UnityPurchasing via Codeless IAP
    UnityIAP Version: 1.19.0
    Using configuration builder objects
    Already recorded transaction GPA.3307-XXXX-XXXX-03450
    UnityIAP Promo: Clearing promo product metadata
     
    Last edited: May 30, 2018
  6. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    We do not currently support refunds. It’s been unclear whether Google supports or does not support determining, on the client, whether an IAP has been refunded. The documentation seems to have been changed around 2015 to remove information about detecting the change in purchase status of an IAP, from the client. Before there was an IN_APP_NOTIFY event in the document. Now, that event has been removed from Google’s documentation
     
  7. nitrogen777

    nitrogen777

    Joined:
    Mar 31, 2017
    Posts:
    10
    I think it's not so big problem, but... By Google's rules user can request a refund one time only, after that (if refund approved and user received his money back) the content will be unavailable for this user. And it's unclear what means 'unavailable'
    - Unavailable in the app (for use) just for next purchase
    - Unavailable forever (user can't purchase again)
    I think the first is more correct, but I really don't know how this mechanism works (before now we were selling whole apps without IAP).
    Currently for our apps we used following scheme. Check on app startup if user bought some item, if yes then 'purchase' button (for particular item) becomes unavailable.
    But for example, the content we sell in the app is non-consumable and we don't wanna sell one item for the one and the same user after refund. So, after refund, the transaction sill recorded and the button to purchase will be blocked. It's convenient for described situation (in my opinion). Yeah, really good scheme, but here's one critical problem: recorded transaction -> system thinks user has bought the content -> user is possible to use the content illegally. The scheme has been crashed :). Anyway, we also can modify our 'refund policy' to prevent the refund some items in the situation when users contact us with the refund requests. @JeffDUnity3D, thanks for information! Sorry for my bad english and for a little bit offtopic