Chuyển Robux cho phép người đăng ký Roblox Plus gửi Robux trực tiếp cho người dùng khác.
Để hỗ trợ chuyển giao trong trò chơi của bạn, hãy gọi PromptRobuxTransferAsync để mở lệnh chuyển giao và sử dụng BindReceiptHandler để xử lý biên nhận chuyển giao. Khi một người đăng ký hoàn tất việc chuyển giao, trò chơi của bạn sẽ kiếm được 10% số Robux được gửi và người nhận sẽ nhận được 90% còn lại. Ví dụ, một lần chuyển giao 100 Robux sẽ trả 90 Robux cho người nhận và 10 Robux cho trò chơi của bạn.
Robux mà trò chơi của bạn kiếm được từ chuyển giao đủ điều kiện tham gia chương trình DevEx. Roblox không lấy phí từ những chuyển giao này.

Là một nhà phát triển, bạn không có quyền truy cập vào chi tiết chuyển giao hay kiểm soát việc thực hiện. Tất cả các chuyển giao Robux được xử lý và quản lý bởi nền tảng Roblox, và tất cả các hành động của người gửi và người nhận đều trải qua cùng một kiểm tra an toàn và đủ điều kiện. Trong trò chơi của bạn, các chuyển giao được hoàn tất thông qua một giao diện người dùng do Roblox kiểm soát để đảm bảo chúng an toàn và tuân thủ chính sách.
Yêu cầu chuyển Robux
Để bắt đầu một chuyển giao Robux trong trò chơi của bạn:
- Gọi PromptRobuxTransferAsync từ một tập lệnh phía máy chủ.
- Truyền các tham số cần thiết:
- sender: Người chơi khởi xướng việc chuyển giao.
- receiverUserId: ID người dùng của người nhận.
- amount: Số Robux để chuyển.
- Lưu transferRequestId được trả về, xác định yêu cầu chuyển giao và có thể được sử dụng để ghi lại hoặc liên kết chuyển giao với các biên nhận sau này.
Ví dụ sau khởi xướng một chuyển giao Robux giữa hai người dùng:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Chuyển Robux khi một người dùng kích hoạt một RemoteEvent
local transferEvent = game.ReplicatedStorage:WaitForChild("RequestTransfer")
transferEvent.OnServerEvent:Connect(function(sender, receiverUserId, amount)
-- Kiểm tra hợp lệ đầu vào
if not sender or not sender:IsA("Player") then
return
end
if typeof(receiverUserId) ~= "number" or receiverUserId <= 0 then
warn("receiverUserId không hợp lệ")
return
end
if typeof(amount) ~= "number" or amount <= 0 then
warn("Số tiền không hợp lệ")
return
end
local success, result = pcall(function()
return MarketplaceService:PromptRobuxTransferAsync(sender, receiverUserId, amount)
end)
if success then
print(`Chuyển giao đã được khởi xướng với TransferRequestId: {result}`)
else
warn(`Chuyển giao không thành công: {result}`)
end
end)Xử lý biên nhận chuyển giao
Sau khi một chuyển giao thành công, Roblox sẽ tạo ra biên nhận cho cả người gửi và người nhận. Bạn có thể xử lý các biên nhận này bằng cách sử dụng BindReceiptHandler để xác nhận rằng việc chuyển giao đã hoàn tất thành công.
Để khuyến khích các người đăng ký Plus chuyển Robux trong trò chơi của bạn, bạn có thể cung cấp các vật phẩm hoặc quyền lợi khác cho mỗi lần chuyển giao thành công. Nếu bạn làm như vậy, hãy xử lý biên nhận trước khi cấp phần thưởng để đảm bảo nó chỉ được cấp cho những chuyển giao đã hoàn tất.
Để xử lý biên nhận chuyển giao Robux:
- Sử dụng BindReceiptHandler để đăng ký một trình xử lý cho RobuxTransferSender, mà xử lý các biên nhận cho người dùng khởi xướng việc chuyển giao.
- Đăng ký một trình xử lý thứ hai cho RobuxTransferReceiver, mà xử lý các biên nhận cho người dùng nhận Robux.
- Trong mỗi trình xử lý, kiểm tra thông tin biên nhận, bao gồm PlayerId và TransferRequestId. Cả hai loại biên nhận đều bao gồm một TransferRequestId khớp với transferRequestId được trả về bởi PromptRobuxTransferAsync.
- Trả về một giá trị Enum.ReceiptDecision từ trình xử lý của bạn:
- Trả về Processed sau khi hoàn thành việc xử lý biên nhận. Điều này đánh dấu biên nhận là hoàn tất và xác nhận việc chuyển Robux đã thành công.
- Trả về NotProcessedYet nếu biên nhận không thể xử lý ngay lúc này (ví dụ, nếu người dùng không còn trên máy chủ). Điều này giữ biên nhận chưa được giải quyết để có thể giao sau này (ví dụ, khi người dùng tham gia lại máy chủ).
Ví dụ sau đăng ký các trình xử lý cho cả biên nhận của người gửi và người nhận:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Xử lý biên nhận của người gửi (người đã gửi Robux)
local senderConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferSender,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
-- Người dùng đã rời khỏi máy chủ - việc xử lý biên nhận sẽ được hoãn lại cho đến khi người dùng tham gia lại máy chủ
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name} đã gửi Robux (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- Bạn có thể cấp bất kỳ công nhận nào bên phía người gửi hoặc cập nhật giao diện người dùng ở đây
return Enum.ReceiptDecision.Processed
end
)
-- Xử lý biên nhận của người nhận (người đã nhận 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} đã nhận Robux (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- Bạn có thể cấp bất kỳ lợi ích nào bên phía người nhận hoặc cập nhật giao diện người dùng ở đây
return Enum.ReceiptDecision.Processed
end
)