Developer Products – In‑Game Purchases
Developer Products – In‑Game Purchases
Developer products are items which players can buy more than once, making them perfect for in-game currency, ammo, or similar purchases.
Articles/Game Passes One Time Purchases|Game Passes.
Creating a Developer Product
To make a new developer product, go to the Create page on the Roblox website. Once there, make sure that the My Creations tab is selected and that “Games” is selected in the left column.
Now follow these steps to create a developer product:
- Determine the game you want to create a product for.
- In the settings drop-down menu on the right-hand side, select Configure Game.
- Select the Developer Products tab in the left column and then click the Create new button.
- On the product creation page, fill in all of the necessary boxes, then click Create.
- After creating the developer product, Roblox assigns it a unique ID. You’ll need this number when scripting developer products, but don’t worry if you forget a product ID — just return to the game configuration page where all of your developer products are neatly listed:
Scripting for Developer Products
To take full advantage of developer products, you’ll need to use scripting. Here are some common examples:
Getting a Game’s Developer Products
To gather data for all of the developer products in a game, use the
MarketplaceService/GetDeveloperProductsAsync|GetDeveloperProductsAsync() method. This returns a
Pages object that you can inspect and filter to build an in-game store, product list GUI, etc.
Getting Product Info
To get information (price, name, image, etc.) for a specific product, use the
MarketplaceService/GetProductInfo|GetProductInfo() function with a second argument:
local MarketplaceService = game:GetService("MarketplaceService") local productID = 0000000 -- Change this to your developer product ID local productInfo = MarketplaceService:GetProductInfo(productID, Enum.InfoType.Product)
Prompting a Purchase
You can prompt a player to purchase one of your developer products with the
MarketplaceService/PromptProductPurchase|PromptProductPurchase() method of
MarketplaceService. In the following code, the
promptPurchase() function can be called when the player presses a
Articles/Creating GUI Buttons|button, talks to a vendor NPC, or whatever fits your game design.
-- This code should be within a 'LocalScript' object local MarketplaceService = game:GetService("MarketplaceService") local Players = game:GetService("Players") local productID = 0000000 -- Change this to your developer product ID -- Function to prompt purchase of the developer product local function promptPurchase() local player = Players.LocalPlayer MarketplaceService:PromptProductPurchase(player, productID) end
After a purchase is made, it’s your responsibility to handle and record the transaction. This can be done inside a server-side script (
Script) using the
MarketplaceService/ProcessReceipt|ProcessReceipt callback. The function you define will be called repetitively until it returns
-- This code should be in a 'Script' object within 'ServerScriptService' local MarketplaceService = game:GetService("MarketplaceService") local function processReceipt(receiptInfo) -- Find the player who made the purchase in the server local player = game:GetService("Players"):GetPlayerByUserId(receiptInfo.PlayerId) if not player then -- The player probably left the game -- If they come back, the callback will be called again return Enum.ProductPurchaseDecision.NotProcessedYet end -- Output what product they bought print(receiptInfo.PlayerId .. " just bought " .. receiptInfo.ProductId) -- IMPORTANT: Tell Roblox that the game successfully handled the purchase return Enum.ProductPurchaseDecision.PurchaseGranted end -- Set the callback (this can only be done once by one script on the server!) MarketplaceService.ProcessReceipt = processReceipt
Articles/Data store|data stores. See the
MarketplaceService/ProcessReceipt|ProcessReceiptreference for a code example which includes data store usage.
receiptInfotable passed to the
processReceipt()callback function contains detailed info on the purchase. See the
MarketplaceService/ProcessReceipt|ProcessReceiptreference for a list of keys and descriptions.