ProcessReceipt doesn't fire when datastores are down

In light of recent events, I think that a new feature needs to be added to MarketplaceService ProcessReceipt function.

Reasoning: Even if there are redundancy measures in-place to prevent loss of player data, players can still purchase consumable items. If a player purchases consumable items, the processreceipt function fires, and then leaves the game while the datastores are down, the player will lose the currency that they purchased.

What I think should be done to fix this issue:
Before ProcessReceipt is fired, a test call should be done to verify that the DataStores are indeed functioning correctly. If the call fails, ProcessReceipt is never fired. This can be done manually, but I feel that it should be mandatory.

They already get refunded a couple days later if Enum.Whatever.PurchaseGranted is not returned by ProcessReceipt (which also happens if ProcessReceipt isn’t invoked).

If you don’t return PurchaseGranted after three days the player’s money is refunded.

Someone should probably add the exact amount of time before refunds to the wiki

I’m aware that the player’s money is refunded if PurchaseGranted isn’t fired. I’m just saying that it’d be nice to have a primary redundancy measure in-place to prevent lost currency for the developers who do not have secondary measures in place to prevent data loss.

You’re out of a couple Robux for 3 days – big deal.

I think OP is talking about the devprods that people use like subscriptions; in which case you could easily just test your datastores in the ProcessReceipt callback:

if not pcall(function() return DataStore:GetAsync("DataStoresLive") end) then
    return Enum.ProductPurchaseDecision.NotProcessedYet
end

I think OP is talking about the devprods that people use like subscriptions; in which case you could easily just test your datastores in the ProcessReceipt callback:

if not pcall(function() return DataStore:GetAsync("DataStoresLive") end) then return Enum.ProductPurchaseDecision.NotProcessedYet end [/quote]

Exactly what I think would work, except I think that it should be built in by default.

My only question is:

“Why does roblox allow users to purchase Developer Products when DataStores/MarkPlaceService are down? Shouldn’t it like pop up a message saying ‘Error: Developer Products can not be purchased at this time’ ?”

The whole taking customers money and giving it back 3 days later due to a fault outside my control just sounds sketchy. Would be better if the money just wasn’t taken in the first place.