Can someone explain how ProcessReceipt works please?

I didn’t know ProcessReceipt can be called multiple times for the same purchase. Why does this happen, and how long does it continue to check for?

Thanks in advance.

At the end of your function just add

return Enum.ProductPurchaseDecision.PurchaseGranted -- the script doesn't know if the player got the item yet.

and it should work

Yes, but if the purchase can’t be granted, my only choice is to return NotProcessedYet and it continues to always be checked after?

If you return NotProcessedYet then the script will still check but it won’t be called multiple times if the player buys the same product. If you return NotProcessedYet it’s usually that the player left.