Help With My Dev Product Script

Hi, so I’m trying to make a product to where when you purchase it, it will insert the sound with the ID set by the player. However, on the script I’m using to process the receipt, it defines the ID at the beginning of the script before the player even types it in, so it won’t actually give it the ID that the player wants.

Here is the script:

local MarketplaceService = game:GetService("MarketplaceService")
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")

local purchaseHistoryStore = DataStoreService:GetDataStore("PurchaseHistory")


local productFunctions = {}

productFunctions[1171899953] = function(receipt, player)
	local box = player.PlayerGui:FindFirstChild("settings").mainSettings.playAudioPrompt.Frame.enterID
	local assetID = tonumber(box.Text)
	if assetID then
		local sound = Instance.new("Sound")
		sound.Parent = game.Workspace.songs
		sound.SoundId = ("rbxassetid://"..player.PlayerGui:FindFirstChild("settings").mainSettings.playAudioPrompt.Frame.enterID.Text)
		sound.Name = "playerSound"
		return true
	end
end

local function processReceipt(receiptInfo)

	local playerProductKey = receiptInfo.PlayerId .. "_" .. receiptInfo.PurchaseId
	local purchased = false
	local success, errorMessage = pcall(function()
		purchased = purchaseHistoryStore:GetAsync(playerProductKey)
	end)
	
	if success and purchased then
		return Enum.ProductPurchaseDecision.PurchaseGranted
	elseif not success then
		error("Data store error:" .. errorMessage)
	end


	local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
	
	if not player then
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end


	local handler = productFunctions[receiptInfo.ProductId]

	local success, result = pcall(handler, receiptInfo, player)
	if not success or not result then
		warn("Error occurred while processing a product purchase")
		print("\nProductId:", receiptInfo.ProductId)
		print("\nPlayer:", player)
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end
	

	local success, errorMessage = pcall(function()
		purchaseHistoryStore:SetAsync(playerProductKey, true)
	end)
	if not success then
		error("Cannot save purchase data: " .. errorMessage)
	end


	return Enum.ProductPurchaseDecision.PurchaseGranted
end


MarketplaceService.ProcessReceipt = processReceipt

Is there any way I can combat this issue? Any support is appreciated.

The problem is that the changes to the TextBox is visible only for the client and not for the server.

So should I fire a remote event with the asset ID to the table function?

Yea I would go with it most likely.