Currently it’s impossible for third party applications to process receipts within experiences without over-writing the places receipt handler.
Similar to how platforms like Stripe have streamlined payment handling on the web, third-party applications have the potential to do the same for Roblox experiences. The less time spent worrying about monetization means developers can dedicate more time making their experiences as enjoyable as possible.
For example, this could function as followed:
local ARRAY_OF_PRODUCTS = {123, 456, 789}
MarketplaceService:ProcessSpecificReceipts(ARRAY_OF_PRODUCTS, function(receiptInfo)
-- Handle logic
if success then
return Enum.ProductPurchaseDecision.PurchaseGranted
else
return Enum.ProductPurchaseDecision.NotProcessedYet
end
end)
You might ask: why not just over-write the current receipt handler then call that within the third-party receipt handler? Firstly that doesn’t scale for multiple third party applications, and secondly if you attempt to do that the following error is produced:
-- Pretend this is set by the game owner
MarketplaceService.ProcessReceipt = function()
-- Handle logic
print("Processed game receipt!")
return Enum.ProductPurchaseDecision.PurchaseGranted
end
-- This would then be set by the third party application (but currently throws an error)
MarketplaceService.ProcessReceipt = function()
local gameReceiptCallback = MarketplaceService.ProcessReceipt
if isAThirdPartyProduct then
-- Handle logic
print("Processed third-party receipt")
return Enum.ProductPurchaseDecision.PurchaseGranted
else
return gameReceiptCallback()
end
end
Before we approach adding this proposed functionality, can you help us understand the certain uses cases? Are there any plugins + third party applications that you can point us towards to see how they currently handle it.
Ideally, you as the game owner have complete control over how the receipts get processed, if you want to pass off the granting functionality to the third party’s code, you will have to make that decision.
Should look something like this.
MarketplaceService.ProcessReceipt = function()
if isAThirdPartyProduct then
-- Handle logic
print("Processed third-party receipt")
return ThirdPartyProductCallback()
else
print("Processed game receipt!")
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end
With HD Admin one of the most frequently requested feature from our large and small users is the ability to sell single-use or temporary commands and roles. For example, a purchasable single-use nuke or some temporary character effects which remain until the player leaves the server.
Because products take around 8 seconds to purchase we’d also like to explore selling currency-like developer products which can then be exchanged for these temporary commands/effects/roles. Currently third-party applications can only manage gamepasses which provide a limited form of monetisation.
Our goal for these applications is to involve zero-code (configuration via interfaces), to require minimal setup and to be configurable live in-game. This is currently impossible with how receipts work because as you mentioned would require direct programming and additional understanding of Roblox and our documentation/APIs.
A Marketplace method to process specific receipts would enable us to create powerful features like this to ultimately benefit developers who can divert their focus from monetisation to for instance making their games as enjoyable as possible.