Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Developer Product duplicating purchase?

I have a few Developer products named Gold100, Gold500, Gold1000 and Gold2500 (inside a folder called which gives players cash. They are inside a folder called Gold, inside a folder called Gamepasses

I have a button which gets pressed and sends a remote event to the server. The server finds the remote event and then Prompts a Dev Product Purchase. When they buy it, They a function called ProcessReceipt will run and it will loop through a folder in ReplicatedStorage which has folders named after all the gamepasses.

Here's the problem: Everytime I make a purchase. It will loop again. For example if I pay for 2500 Gold once. It will give me 2500 Gold. If i pay for 2500 Gold twice, it will give me 2500 Gold, and then give me another 2500 Gold.

function ProcessReceipt(ReceiptInfo)
	
	local Player = Players:GetPlayerByUserId(ReceiptInfo.PlayerId)--Finds player
	
	if Player then--if they exist		
			
		for i,v in pairs(ReplicatedStorage.Gamepasses.Gold:GetChildren())do
			
			print("RECEIPT INFO PRODUCT ID =",ReceiptInfo.ProductId,"&","GOLD ID =",v.ProductId.Value)
			
			if v.ProductId.Value == ReceiptInfo.ProductId then --If the product id matches the one the player bought
				
				print("Found correct product id")
				
				Player.Essentials.Currency.Gold.Value = Player.Essentials.Currency.Gold.Value + v.GoldPurchase.Value
				--Player's Gold Value adds the amount of gold from the gamepass to the player
				
				break--gets out of loop
			end
			
		end
		print("went through all gold gamepasses")
			
	end
	
end



RemoteEvents.C2S.Gamepass.Gold100.OnServerEvent:Connect(function(Player)--finds RE
	
	local ProductID = GamepassFolder.Gold.Gold100.ProductId.Value --Gets Value of Product ID (This is a string value which stores the value of the developer product id_
	
	MarketplaceService:PromptProductPurchase(Player,ProductID)--Prompts purchase
	
	
end)

RemoteEvents.C2S.Gamepass.Gold500.OnServerEvent:Connect(function(Player)
	
	local ProductID = GamepassFolder.Gold.Gold500.ProductId.Value
	
	MarketplaceService:PromptProductPurchase(Player,ProductID)
end)

RemoteEvents.C2S.Gamepass.Gold1000.OnServerEvent:Connect(function(Player)
	
	local ProductID = GamepassFolder.Gold.Gold1000.ProductId.Value
	
	MarketplaceService:PromptProductPurchase(Player,ProductID)
end)


RemoteEvents.C2S.Gamepass.Gold2500.OnServerEvent:Connect(function(Player)
	
	local ProductID = GamepassFolder.Gold.Gold2500.ProductId.Value
	
	MarketplaceService:PromptProductPurchase(Player,ProductID)
end)


MarketplaceService.ProcessReceipt = ProcessReceipt--Runs every time the player clicks buy

Would be nice if someone could help.

1 answer

✓ Accepted answer

Use this so when the user buys it comfirms the purchase was completed or else it will make the old receipt valid and keep doubling the reward

return Enum.ProductPurchaseDecision.PurchaseGranted

accept if usefull

1 comment

0

Thanks!

This discussion is preserved as it was. New answers, comments, and votes are closed.