Robux transferleri, Roblox Plus abonelerinin Robux'u doğrudan diğer kullanıcılara göndermesine olanak tanır.
Oyunuzda transferleri desteklemek için, transfer istemcisini açmak için PromptRobuxTransferAsync çağrısını yapın ve transfer makbuzlarını işlemek için BindReceiptHandler kullanın. Bir abone transfer tamamladığında, oyununuz gönderilen Robux'un %10'unu kazanır ve alıcı kalan %90'ını alır. Örneğin, 100 Robux transferi, alıcıya 90 Robux ve oyununuza 10 Robux öder.
Oyunuzun transferlerden kazandığı Robux, DevEx programı için uygundur. Roblox, bu transferler üzerinden herhangi bir ücret talep etmez.

Bir yaratıcı olarak, transfer detaylarına erişiminiz yoktur ve uygulamanın kontrolüne sahip değilsiniz. Tüm Robux transferleri Roblox platformu tarafından işlenir ve yönetilir, tüm gönderen ve alıcı işlemleri aynı güvenlik ve uygunluk kontrollerinden geçer. Oyunuzda, transferler güvenli ve politika ile uyumlu olması için Roblox kontrolünde bir arayüz üzerinden tamamlanır.
Robux transferlerini isteme
Oyunuzda bir Robux transferini başlatmak için:
- Sunucu tarafı bir betikten PromptRobuxTransferAsync çağrısını yapın.
- Gerekli parametreleri geçin:
- sender: Transferi başlatan oyuncu.
- receiverUserId: Alıcının kullanıcı ID'si.
- amount: Transfer edilecek Robux miktarı.
- Transfer talebini tanımlayan ve daha sonra makbuzlarla ilişkilendirmek için kullanılabilecek transferRequestId değerini saklayın.
Aşağıdaki örnek, iki kullanıcı arasında bir Robux transferini başlatır:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Bir kullanıcının RemoteEvent'i tetiklemesiyle Robux transferi
local transferEvent = game.ReplicatedStorage:WaitForChild("RequestTransfer")
transferEvent.OnServerEvent:Connect(function(sender, receiverUserId, amount)
-- Girişleri doğruluyor
if not sender or not sender:IsA("Player") then
return
end
if typeof(receiverUserId) ~= "number" or receiverUserId <= 0 then
warn("Geçersiz receiverUserId")
return
end
if typeof(amount) ~= "number" or amount <= 0 then
warn("Geçersiz miktar")
return
end
local success, result = pcall(function()
return MarketplaceService:PromptRobuxTransferAsync(sender, receiverUserId, amount)
end)
if success then
print(`Transfer başlatıldı; TransferRequestId: {result}`)
else
warn(`Transfer başarısız oldu: {result}`)
end
end)
Transfer makbuzlarını işleme
Başarılı bir transferin ardından, Roblox gönderici ve alıcı için makbuzlar oluşturur. Bu makbuzları, transferin başarılı bir şekilde tamamlandığını doğrulamak için BindReceiptHandler kullanarak işleyebilirsiniz.
Plus abonelerini oyun içinde Robux transfer etmeleri için teşvik etmek isterseniz, her başarılı transfer için öğeler veya diğer ayrıcalıklar sunabilirsiniz. Eğer yaparsanız, ödülü vermeden önce makbuzu işleyin, böylece ödül yalnızca tamamlanmış transferler için verilir.
Robux transfer makbuzlarını işlemek için:
- RobuxTransferSender için bir işleyici kaydetmek üzere BindReceiptHandler kullanın; bu, transferi başlatan kullanıcı için makbuzları işler.
- RobuxTransferReceiver için ikinci bir işleyici kaydedin; bu, Robux'u alan kullanıcı için makbuzları işler.
- Her işleyicide, PlayerId ve TransferRequestId dahil olmak üzere makbuz bilgilerini inceleyin. Her iki makbuz türü de PromptRobuxTransferAsync tarafından döndürülen transferRequestId ile eşleşen bir TransferRequestId içerir.
- İşleyicinizden bir Enum.ReceiptDecision değeri döndürün:
- Makbuzu işledikten sonra Processed değerini döndürün. Bu, makbuzu tamamlanmış olarak işaretler ve Robux transferinin başarılı olduğunu doğrular.
- Makbuz henüz işlenemiyorsa (örneğin, kullanıcı artık sunucuda değilse) NotProcessedYet değerini döndürün. Bu, makbuzun çözülmemiş olarak kalmasını sağlar, böylece daha sonra (örneğin, kullanıcı sunucuya yeniden katıldığında) teslim edilebilir.
Aşağıdaki örnek, hem gönderici hem de alıcı makbuzları için işleyiciler kaydeder:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Gönderici makbuzlarını işler (Robux'u gönderen kullanıcı)
local senderConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferSender,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
-- Kullanıcı sunucudan ayrıldı - makbuz işleme, kullanıcının sunucuya yeniden katılana kadar ertelenir
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name} Robux gönderdi (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- Burada herhangi bir gönderici yanıtı ya da arayüz güncellemesi verebilirsiniz
return Enum.ReceiptDecision.Processed
end
)
-- Alıcı makbuzlarını işler (Robux'u alan kullanıcı)
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 aldı (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- Burada herhangi bir alıcı yanıtı ya da arayüz güncellemesi verebilirsiniz
return Enum.ReceiptDecision.Processed
end
)