'Codeless Unity IAP Slow Card Handling

I am using Unity IAP 4.1.4.

As you know there are 4 different test cards on purchase testing. My question is what should I do when payment is slow? If user quits the game before payment validated I can't approve the payment and purchase is pending. Is there any way to handle slow payments?

This is the script.

 public class IAPManager : MonoBehaviour
 {
 private string coin250k = "//";
 private string coin500k = "//";


 public void OnPurchaseComplete(Product product)
 {
     var validator = new CrossPlatformValidator(GooglePlayTangle.Data(),AppleTangle.Data(), Application.identifier);

     bool ValidPurchase = false;

     try
     {
         // On Google Play, result has a single product ID.
         // On Apple stores, receipts contain multiple products.
         var result = validator.Validate(product.receipt);
         // For informational purposes, we list the receipt(s)
         Debug.Log("Receipt is valid. Contents:");

         foreach (IPurchaseReceipt productReceipt in result)
         {
             Debug.Log(productReceipt.productID);
             Debug.Log(productReceipt.purchaseDate);
             Debug.Log(productReceipt.transactionID);


             GooglePlayReceipt google = productReceipt as GooglePlayReceipt;
             if (null != google)
             {
                 // This is Google's Order ID.
                 // Note that it is null when testing in the sandbox
                 // because Google's sandbox does not provide Order IDs.
                 ValidPurchase = true;

                 Debug.Log(" google transaction" + google.transactionID);
                 Debug.Log(" google transaction" + google.purchaseState);
                 Debug.Log(" google transaction" + google.purchaseToken);
             }

             AppleInAppPurchaseReceipt apple = productReceipt as AppleInAppPurchaseReceipt;
             if (null != apple)
             {
                 ValidPurchase = true;
                 Debug.Log(" apple transaction1" + apple.originalTransactionIdentifier);
                 Debug.Log(" apple transaction2" + apple.subscriptionExpirationDate);
                 Debug.Log(" apple transaction3" + apple.cancellationDate);
                 Debug.Log(" apple transaction4" + apple.quantity);
             }
         }
     }
     catch (IAPSecurityException)
     {
         Debug.Log("Invalid receipt, not unlocking content");
         ValidPurchase = false;
     }
     //product.receipt;
     if (ValidPurchase)
     {
         if (product.definition.id == coin250k)
         {
             //
         }
         else if (product.definition.id == coin500k)
         {
             //
         }
     }

 }    
 public void OnPurchaseFailed(Product product, PurchaseFailureReason reason)
 {
     Debug.Log(product.definition.id + " failed because: "+ reason);
 }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source