NotProcessedYet Taking Robux from Users

when trying to return Enum.ProductPurchaseDecision.NotProcessedYet it will take the Robux out of the players account, I see this was a big issue relating to the marketplace and could get exploited, and I think it could be related to the recent issues with studio and the marketplace errors that used to show up in my games, correct me if I’m wrong if this now takes your Robux or changed.

Note: I had another dev friends tell me that DTI game is also maybe having issues with the marketplace

(This Error no longer exist since the studio issues, only the NotProcessedYet issue is still there)

Example Code

local MarketplaceService = game:GetService("MarketplaceService")

MarketplaceService.ProcessReceipt = function(receiptInfo)
	local plr = Players:GetPlayerByUserId(receiptInfo.PlayerId)
	
	return Enum.ProductPurchaseDecision.NotProcessedYet -- takes your robux still no matter what (this is not PurchaseGranted)
end

Expected behavior

assuming its not supposed to get processed and the user keeps there Robux.

A private message is associated with this bug report

3 Likes

This is permanently removing their robux? From my understanding NotProcessedYet doesn’t grant back the robux immediately. The robux will stay in a sort of pending state until PurchaseGranted is returned or the time limit runs out (I believe it’s a few days?) and the robux is returned to the user.

1 Like

Hey there, this is as designed, please review the details on MarketplaceService | Documentation - Roblox Creator Hub

ProcessReceipt fires after the Robux transaction has already completed, so the Robux is already taken before your callback is invoked. (before we know if you will return PurchaseGranted or something else.) The callback will continue to be invoked at the interval described in the documentation until you return PurchaseGranted for that receipt.

Specifically:

Unresolved Purchases

Unresolved developer product purchases are not removed or refunded after the escrow period has expired. Instead, ProcessReceipt callbacks will indefinitely be invoked for unresolved purchases in the manner described above.

Retries / Timeout

There is no time-based “retry” mechanism, meaning that if a Enum.ProductPurchaseDecision enum of NotProcessedYet is returned for a purchase, it will not try again on the same server unless the player successfully initiates another developer product purchase (same product or another product) or re-joins the server. There is also no “timeout” for yielded callbacks; a callback can yield for as long as the server is running and its result will still be accepted when it does return.

NotProcessedYet is not a way to return the Robux to the player’s account, it is to explicitly indicate the payment cannot be processed right now.

3 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.