If Enum.ProductPurchaseDecision.NotProcessedYet is returned when a player’s purchase fails. When the player rejoins a new server, if for some reason the script that defines the MarketPlaceService.ProccessReceipt function errors or is not defined in time, the receipt is lost. From then on, every time the player joins a server, the ProccessReceipt function will never fire again for that purchase.
Repro
- Add this code to a new place and replace the username and product id with your own
game:GetService("MarketplaceService").ProcessReceipt = function(receipt)
print("RECEIPT EXISTS")
return Enum.ProductPurchaseDecision.NotProcessedYet
end
delay(10, function()
game:GetService("MarketplaceService"):PromptProductPurchase(game.Players.Dued1, 1684687081)
end)
- Publish and join your game
- Purchase the product.
- Rejoin the game. Notice how the RECEIPT EXISTS print appears
- Leave the game
- Comment out lines 1-4
- Publish and join game - this is when the receipt is destroyed because ProcessReceipt is not defined
- Leave game
- Uncomment the code
- Publish and join the game again
- Notice how RECEIPT EXISTS does not print this time. It will never print no matter how many times you join