Robux 转账 允许 Roblox Plus 订阅者直接将 Robux 发送给其他用户。
要在您的游戏中支持转账,请调用 PromptRobuxTransferAsync 打开转账提示,并使用 BindReceiptHandler 处理转账收据。当订阅者完成转账时,您的游戏可以获得发送的 Robux 的 10%,而接收者将收到剩余的 90%。例如,100 Robux 转账会将 90 Robux 支付给接收者,并将 10 Robux 支付给您的游戏。
您的游戏从转账中获得的 Robux 符合 DevEx 计划。Roblox 不会从这些转账中收取费用。

作为创造者,您无法访问转账详情或控制执行。所有 Robux 转账都由 Roblox 平台处理和管理,所有发件人和接收人操作都经过相同的安全性和资格检查。在您的游戏中,转账通过 Roblox 控制的用户界面完成,以确保安全和符合政策。
提示 Robux 转账
要在您的游戏中发起 Robux 转账:
- 从服务器脚本调用 PromptRobuxTransferAsync。
- 传递所需的参数:
- sender: 发起转账的玩家。
- receiverUserId: 接收者的用户 ID。
- amount: 要转账的 Robux 数量。
- 存储返回的 transferRequestId,该标识符用于标识转账请求并可以用于稍后记录或关联转账与收据。
以下示例在两个用户之间发起 Robux 转账:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- 当用户触发 RemoteEvent 时转账 Robux
local transferEvent = game.ReplicatedStorage:WaitForChild("RequestTransfer")
transferEvent.OnServerEvent:Connect(function(sender, receiverUserId, amount)
-- 验证输入
if not sender or not sender:IsA("Player") then
return
end
if typeof(receiverUserId) ~= "number" or receiverUserId <= 0 then
warn("无效的 receiverUserId")
return
end
if typeof(amount) ~= "number" or amount <= 0 then
warn("无效的金额")
return
end
local success, result = pcall(function()
return MarketplaceService:PromptRobuxTransferAsync(sender, receiverUserId, amount)
end)
if success then
print(`转账已发起,TransferRequestId: {result}`)
else
warn(`转账失败: {result}`)
end
end)
处理转账收据
成功转账后,Roblox 会为发件人和接收人生成收据。您可以使用 BindReceiptHandler 处理这些收据,以确认转账是否成功完成。
为了鼓励 Plus 订阅者在您的游戏中转账 Robux,您可以为每笔成功转账提供物品或其他福利。如果您这样做,请在授予奖励之前处理收据,以确保只有在完成转账后才给予奖励。
要处理 Robux 转账收据:
- 使用 BindReceiptHandler 注册一个处理程序,处理 RobuxTransferSender 的收据,该收据是为发起转账的用户处理的。
- 为 RobuxTransferReceiver 注册第二个处理程序,该收据是为接收到 Robux 的用户处理的。
- 在每个处理程序中,检查收据信息,包括 PlayerId 和 TransferRequestId。这两种收据类型都包含一个与 PromptRobuxTransferAsync 返回的 transferRequestId 匹配的 TransferRequestId。
- 从您的处理程序返回一个 Enum.ReceiptDecision 值:
- 在处理完收据后,返回 Processed。这会将收据标记为完成,并确认 Robux 转账已成功。
- 如果收据尚不能被处理(例如,如果用户不再在服务器上),返回 NotProcessedYet。这将保持收据未解决,以便稍后交付(例如,当用户重新加入服务器时)。
以下示例为发件人和接收人收据注册了处理程序:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- 处理发件人收据(发送 Robux 的用户)
local senderConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferSender,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
-- 用户离开了服务器 - 收据处理被推迟,直到用户重新加入服务器
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name} 发送了 Robux (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- 您可以在这里授予任何发件人侧确认或更新用户界面
return Enum.ReceiptDecision.Processed
end
)
-- 处理接收人收据(接收到 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} 收到了 Robux (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- 您可以在这里授予任何接收人侧福利或更新用户界面
return Enum.ReceiptDecision.Processed
end
)