Transferências de Robux permitem que assinantes do Roblox Plus enviem Robux diretamente para outros usuários.
Para suportar transferências em seu jogo, chame PromptRobuxTransferAsync para abrir o prompt de transferência e use BindReceiptHandler para processar recibos de transferência. Quando um assinante completa uma transferência, seu jogo ganha 10% dos Robux enviados e o destinatário recebe os restantes 90%. Por exemplo, uma transferência de 100 Robux paga 90 Robux ao destinatário e 10 Robux ao seu jogo.
Os Robux que seu jogo ganha com transferências são elegíveis para o programa DevEx. A Roblox não cobra uma taxa dessas transferências.

Como criador, você não tem acesso aos detalhes da transferência ou controle sobre a execução. Todas as transferências de Robux são processadas e gerenciadas pela plataforma Roblox, e todas as ações de remetente e destinatário passam pelas mesmas verificações de segurança e elegibilidade. Dentro do seu jogo, as transferências são concluídas através de uma interface de usuário controlada pela Roblox para garantir que sejam seguras e em conformidade com as políticas.
Promptar transferências de Robux
Para iniciar uma transferência de Robux dentro do seu jogo:
- Chame PromptRobuxTransferAsync de um script do lado do servidor.
- Passe os parâmetros necessários:
- sender: O jogador que inicia a transferência.
- receiverUserId: O ID do usuário do destinatário.
- amount: A quantidade de Robux a ser transferida.
- Armazene o transferRequestId retornado que identifica o pedido de transferência e pode ser usado para registrar ou correlacionar a transferência com recibos mais tarde.
O seguinte exemplo inicia uma transferência de Robux entre dois usuários:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Transfere Robux quando um usuário aciona um RemoteEvent
local transferEvent = game.ReplicatedStorage:WaitForChild("RequestTransfer")
transferEvent.OnServerEvent:Connect(function(sender, receiverUserId, amount)
-- Valida entradas
if not sender or not sender:IsA("Player") then
return
end
if typeof(receiverUserId) ~= "number" or receiverUserId <= 0 then
warn("receiverUserId inválido")
return
end
if typeof(amount) ~= "number" or amount <= 0 then
warn("quantidade inválida")
return
end
local success, result = pcall(function()
return MarketplaceService:PromptRobuxTransferAsync(sender, receiverUserId, amount)
end)
if success then
print(`Transferência iniciada com TransferRequestId: {result}`)
else
warn(`Transferência falhou: {result}`)
end
end)
Lidar com recibos de transferência
Após uma transferência bem-sucedida, a Roblox gera recibos para tanto o remetente quanto o destinatário. Você pode processar esses recibos usando BindReceiptHandler para confirmar que a transferência foi concluída com sucesso.
Para incentivar os assinantes do Plus a transferirem Robux dentro do seu jogo, você pode oferecer itens ou outros benefícios para cada transferência bem-sucedida. Se você fizer isso, processe o recibo antes de conceder a recompensa para garantir que ela seja dada apenas por transferências concluídas.
Para processar recibos de transferência de Robux:
- Use BindReceiptHandler para registrar um manipulador para RobuxTransferSender, que lida com recibos para o usuário que iniciou a transferência.
- Registre um segundo manipulador para RobuxTransferReceiver, que lida com recibos para o usuário que recebeu os Robux.
- Em cada manipulador, inspecione as informações do recibo, incluindo PlayerId e TransferRequestId. Ambos os tipos de recibos incluem um TransferRequestId que corresponde ao transferRequestId retornado por PromptRobuxTransferAsync.
- Retorne um valor de Enum.ReceiptDecision do seu manipulador:
- Retorne Processed após terminar de lidar com o recibo. Isso marca o recibo como completo e confirma que a transferência de Robux foi bem-sucedida.
- Retorne NotProcessedYet se o recibo não puder ser processado ainda (por exemplo, se o usuário não estiver mais no servidor). Isso mantém o recibo não resolvido para que possa ser entregue mais tarde (por exemplo, quando o usuário reingressar no servidor).
O seguinte exemplo registra manipuladores para recibos de remetente e destinatário:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Lida com recibos de remetente (o usuário que enviou os Robux)
local senderConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferSender,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
-- Usuário saiu do servidor - o processamento do recibo é adiado até o usuário retornar
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name} enviou Robux (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- Você pode conceder qualquer reconhecimento do lado do remetente ou atualizar a interface aqui
return Enum.ReceiptDecision.Processed
end
)
-- Lida com recibos de destinatário (o usuário que recebeu os Robux)
local receiverConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferReceiver,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name} recebeu Robux (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- Você pode conceder quaisquer benefícios do lado do destinatário ou atualizar a interface aqui
return Enum.ReceiptDecision.Processed
end
)