Provide a method for third-party applications to process receipts, e.g MarketplaceService:ProcessSpecificReceipts (arrayOfProductIDs, callback)

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

ProcessReceipt is a callback member of MarketplaceService; you can only set the callback value, get is not available

10 Likes

Hello!

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
2 Likes

Hi!

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.

4 Likes