I’d like to make a system where customers buy a dev product. We’ve had several cases where people accidentally bought. It costed us the 30% roblox fee to pay it back every time. It’s be great to not return purchase granted unless one of our staff members manually approves it after 3 hours.
The function is being called automatically when that player joins until it’s granted.
Is there a way to grant purchases without having the buyer in-game? I, am able to store all data using MySql and doing Web - discord connections.
I posted a similar reason before as to why this is not possible, the same will apply to your case.
Instead of manually approving purchases, just show a confirmation prompt before showing the real roblox purchase prompt, this way your buyers won’t “accidentally” purchase your products.
Edit:
(Im currently on my phone, so I’ll just explain with text)
When a player clicks a button to purchase a dev product, show a custom made confirmation prompt that will say “Are you sure you want to purchase this?”
If the player clicks yes, then show the real roblox purchase prompt
I get it that it’s not possible and why. I know about that confirmation.
I’m not sure how it could be malicious. Instead of directly saying it’s OK, just wait a bit. It can only be refunded in some cases, aka, not approved. Of the player pays, he loses the robux anyway, except if we refund.
You can’t confirm a purchase after a player has left the game.
However, You could use this strategy:
-Player Decides they want item
-Player makes application or something to staff
-If staff doesn’t approve it, the player hasn’t purchased anything. Great! No need for refunds!
If the staff does approve it, then save that value in the datastore or however you want to store that it has been approved. The next time the player visits, check that value and see if it was saved. If it was, allow them to purchase the item.
-If they purchase it, now you have verified you don’t need to give them a refund and can do what you need. No need for refunds!
-If they don’t purchase it, they don’t get it. It’s as simple as that.
If you have any questions, feel free to continue the thread.
You’ll probably need to work around this or figure out a strategic way to “stall purchases”. As the Developer Hub states for ProcessReceipt:
After a player makes a purchase through a PromptProductPurchase() dialog, this callback is called multiple times until it returns Enum.ProductPurchaseDecision.PurchaseGranted . For example, the function is called again for a product when the player joins the game — or even after they have bought something else — unless you return Enum.ProductPurchaseDecision.PurchaseGranted .
I personally don’t agree with your method because anything manual is not scalable and can run you into problems regarding human error. It may even cause further concerns, such as with moderation if you don’t handle this with utmost care. However, for the sake of answering your question, I think I may know a way of how you can get this done.
Set up ProcessReceipt as you normally would so that when a player purchases a product, MarketplaceService can process that purchase. Set up a DataStore as well, something along the lines of “approvals” or something similar. You’ll also want a place to see who purchased the product so that you can add that to your staff panel. This will serve as your base.
Now, as far as staff manual approvals go, set up a Gui or something (do NOT do it from an external service) that will allow staff to, of course, “authorise a purchase”. When they authorise a user’s purchase, it sets the customer’s approval status in the DataStore to true.
Now in the ProcessReceipt function, you’ll want to check this approvals DataStore to see if the player is authorised. If so, return PurchaseGranted. NotProcessedYet should be returned by default. Whenever the player joins or buys another product, ProcessReceipt will be ran again. Thus, it repeats the function; if the player is authorised, grant, otherwise don’t.