Enum.ProductPurchaseDecision.PurchaseGranted means the player bought the devproduct
Enum.ProductPurchaseDecision.NotProcessedYet means the purchase request has been sent but not yet processed.
Emm, someone made the purchase, the custom function runs, but something went wrong, then we return NotProcessedYet, Roblox will try to validate that purchase many times after that.
It’s specified in the documentation that the callback is fired once again when the player joins the game or purchases another product until PurchaseGranted is returned. I ran some tests and this is true. However, the callback is only fired again if the player joins the same server it made the original purchase in. Same thing applies for the second statement, the callback is only ran again if the product was purchased in the same server the original product was purchased in.
No, returning NotProcessedYet doesn’t deduct the Robux.
Yes, Roblox will still run the callback again whether it’s a custom function or not. It will follow the conditions I talked about in the first answer.
Sorry for being very late, hope this is still helpful!
I know this is a old post but NotProcessedYet does deduct Robux, when returning ‘Enum.ProductPurchaseDecision.NotProcessedYet’ it takes the robux out of the account, unless this classifies as a bug.
I think it does this in studio because the message pops up saying “purchase successful” but i’m not sure in a live game. Unless anyone is willing to test?
I believe it should be deducted even with NotProcessedYet, but the next time the player joins the game back, the function resume and continue to give the player the things they should receive, then the purchasegranted will be returned (assuming the developer made a correct function for these as explained in Marketplaceservice page), because if NotProcessedYet would not take robux, the next time the player joins back, the function would resume and deduct the robux? that would be way more bad cuz the player either dont want the purchase anymore, or the player have less robux next time they join the game back